March 5, 2006 GETPEERNAME 2

### NAME

getpeername - get name of connected peer

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```int` getpeername(```int s``, struct sockaddr * restrict name``, socklen_t * restrict namelen`)

### DESCRIPTION

getpeername(``) returns the name of the peer connected to socket ```s`. One common use occurs when a process inherits an open socket, such as TCP servers forked from inetd(8). In this scenario, getpeername(``) is used to determine the connecting client's IP address.

getpeername(``) takes three parameters:

```s` contains the file descriptor of the socket whose peer should be looked up.

```name` points to a ```sockaddr` structure that will hold the address information for the connected peer. Normal use requires one to use a structure specific to the protocol family in use, such as ```sockaddr_in` (IPv4) or ```sockaddr_in6` (IPv6), cast to a (struct sockaddr *).

For greater portability, especially with the newer protocol families, the new ```struct` `sockaddr_storage` should be used. ```sockaddr_storage` is large enough to hold any of the other sockaddr_* variants. On return, it can be cast to the correct sockaddr type, based on the protocol family contained in its ss_family field.

```namelen` indicates the amount of space pointed to by ```name`, in bytes.

If address information for the local end of the socket is required, the getsockname(2) function should be used instead.

If ```name` does not point to enough space to hold the entire socket address, the result will be truncated to ```namelen` bytes.

### RETURN VALUES

If the call succeeds, a 0 is returned and ```namelen` is set to the actual size of the socket address returned in ```name`. Otherwise, errno is set and a value of -1 is returned.

### ERRORS

The call succeeds unless:

[```EBADF`]
  The argument ```s` is not a valid descriptor.

[```ENOTSOCK`]
  The argument ```s` is a file, not a socket.

[```ENOTCONN`]
  The socket is not connected.

[```ENOBUFS`]
  Insufficient resources were available in the system to perform the operation.

[```EFAULT`]
  The ```name` parameter points to memory not in a valid part of the process address space.

### SEE ALSO

accept(2), bind(2), getsockname(2), socket(2)

### HISTORY

The getpeername(``) function call appeared in 4.2BSD.