| .\" Copyright (c) 1983, 1991 The Regents of the University of California. |
| .\" All rights reserved. |
| .\" |
| .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" 3. All advertising materials mentioning features or use of this software |
| .\" must display the following acknowledgement: |
| .\" This product includes software developed by the University of |
| .\" California, Berkeley and its contributors. |
| .\" 4. Neither the name of the University nor the names of its contributors |
| .\" may be used to endorse or promote products derived from this software |
| .\" without specific prior written permission. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" %%%LICENSE_END |
| .\" |
| .\" @(#)getpeername.2 6.5 (Berkeley) 3/10/91 |
| .\" |
| .\" Modified Sat Jul 24 16:37:50 1993 by Rik Faith <faith@cs.unc.edu> |
| .\" Modified Thu Jul 30 14:37:50 1993 by Martin Schulze <joey@debian.org> |
| .\" Modified Sun Mar 28 21:26:46 1999 by Andries Brouwer <aeb@cwi.nl> |
| .\" Modified 17 Jul 2002, Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" Added 'socket' to NAME, so that "man -k socket" will show this page. |
| .\" |
| .TH GETPEERNAME 2 2017-09-15 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| getpeername \- get name of connected peer socket |
| .SH SYNOPSIS |
| .B #include <sys/socket.h> |
| .PP |
| .BI "int getpeername(int " sockfd ", struct sockaddr *" addr \ |
| ", socklen_t *" addrlen ); |
| .SH DESCRIPTION |
| .BR getpeername () |
| returns the address of the peer connected to the socket |
| .IR sockfd , |
| in the buffer pointed to by |
| .IR addr . |
| The |
| .I addrlen |
| argument should be initialized to indicate the amount of space pointed to |
| by |
| .IR addr . |
| On return it contains the actual size of the name returned (in bytes). |
| The name is truncated if the buffer provided is too small. |
| .PP |
| The returned address is truncated if the buffer provided is too small; |
| in this case, |
| .I addrlen |
| will return a value greater than was supplied to the call. |
| .SH RETURN VALUE |
| On success, zero is returned. |
| On error, \-1 is returned, and |
| .I errno |
| is set appropriately. |
| .SH ERRORS |
| .TP |
| .B EBADF |
| The argument |
| .I sockfd |
| is not a valid file descriptor. |
| .TP |
| .B EFAULT |
| The |
| .I addr |
| argument points to memory not in a valid part of the |
| process address space. |
| .TP |
| .B EINVAL |
| .I addrlen |
| is invalid (e.g., is negative). |
| .TP |
| .B ENOBUFS |
| Insufficient resources were available in the system |
| to perform the operation. |
| .TP |
| .B ENOTCONN |
| The socket is not connected. |
| .TP |
| .B ENOTSOCK |
| The file descriptor |
| .I sockfd |
| does not refer to a socket. |
| .SH CONFORMING TO |
| POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD |
| .RB ( getpeername () |
| first appeared in 4.2BSD). |
| .SH NOTES |
| For background on the |
| .I socklen_t |
| type, see |
| .BR accept (2). |
| .PP |
| For stream sockets, once a |
| .BR connect (2) |
| has been performed, either socket can call |
| .BR getpeername () |
| to obtain the address of the peer socket. |
| On the other hand, datagram sockets are connectionless. |
| Calling |
| .BR connect (2) |
| on a datagram socket merely sets the peer address for outgoing |
| datagrams sent with |
| .BR write (2) |
| or |
| .BR recv (2). |
| The caller of |
| .BR connect (2) |
| can use |
| .BR getpeername () |
| to obtain the peer address that it earlier set for the socket. |
| However, the peer socket is unaware of this information, and calling |
| .BR getpeername () |
| on the peer socket will return no useful information (unless a |
| .BR connect (2) |
| call was also executed on the peer). |
| Note also that the receiver of a datagram can obtain |
| the address of the sender when using |
| .BR recvfrom (2). |
| .SH SEE ALSO |
| .BR accept (2), |
| .BR bind (2), |
| .BR getsockname (2), |
| .BR ip (7), |
| .BR socket (7), |
| .BR unix (7) |