August 11, 2002 GETSOCKNAME 2

### NAME

getsockname - get socket name

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

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

### DESCRIPTION

getsockname(``) returns the locally bound address information for a specified socket.

Common uses of this function are as follows:

- When bind(2) is called with a port number of 0 (indicating the kernel should pick an ephemeral port) getsockname(``) is used to retrieve the kernel-assigned port number.

- When a process calls bind(2) on a wildcard IP address, getsockname(``) is used to retrieve the local IP address for the connection.

- When a function wishes to know the address family of a socket, getsockname(``) can be used.

getsockname(``) takes three parameters:

```s`, Contains the file descriptor for the socket to be looked up.

```name` points to a ```sockaddr` structure which will hold the resulting address information. 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 (such as newer protocol families) the new structure sockaddr_storage exists. ```sockaddr_storage` is large enough to hold any of the other sockaddr_* variants. On return, it should be cast to the correct sockaddr type, according to the current protocol family.

```namelen` indicates the amount of space pointed to by ```name`, in bytes. Upon return, ```namelen` is set to the actual size of the returned address information.

If the address of the destination socket for a given socket connection is needed, the getpeername(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

On success, getsockname(``) returns a 0, 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.

[```EINVAL`]
  The socket has been shut down.

[```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

bind(2), socket(2)

### HISTORY

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

### BUGS

Names bound to sockets in the UNIX domain are inaccessible; getsockname(``) returns a zero length name.