说明

getpeername()在addr指向的缓冲区中返回连接到套接字sockfd的对等方的地址。应该初始化addrlen参数以指示addr指向的空间量。返回时,它包含返回名称的实际大小(以字节为单位)。如果提供的缓冲区太小,名称将被截断。

如果提供的缓冲区太小,返回的地址将被截断。在这种情况下,addrlen将返回一个大于提供给调用的值。

名称

getpeername-获取连接的对等套接字的名称

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.4BSD(getpeername()首次出现在4.2BSD中)。

语法

#包括

int getpeername(int sockfd,struct sockaddr * addr,socklen_t * addrlen);

错误说明

EBADF
参数sockfd不是有效的文件描述符。
EFAULT
addr参数指向不在进程地址空间有效部分中的内存。
EINVAL
addrlen无效(例如,为负)。
ENOBUFS
系统中没有足够的资源来执行操作。
ENOTCONN
插座未连接。
ENOTSOCK
文件描述符sockfd不引用套接字。

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

GETPEERNAME - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

备注

有关socklen_t类型的背景,请参见accept(2)。

对于流套接字,一旦执行了connect(2),则任何一个套接字都可以调用getpeername()来获取对等套接字的地址。另一方面,数据报套接字是无连接的。在数据报套接字上调用connect(2)仅设置通过write(2)或recv(2)发送的传出数据报的对等地址。 connect(2)的调用者可以使用getpeername()来获取它先前为套接字设置的对等地址。但是,对等套接字不知道此信息,并且在对等套接字上调用getpeername()不会返回任何有用的信息(除非对等套接字也执行了connect(2)调用)。还要注意,使用recvfrom(2)时,数据报的接收方可以获得发送方的地址。

另外参见

accept(2),bind(2),getsockname(2),ip(7),socket(7),unix(7)

日期:2019-08-20 17:58:49 来源:oir作者:oir