LISTEN - Linux手册页

时间:2019-08-20 17:58:56  来源:igfitidea点击:

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

名称

listen-监听套接字上的连接

语法

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

int listen(int sockfd, int backlog);

说明

listen()将sockfd所引用的套接字标记为被动套接字,即,该套接字将用于使用accept(2)接受传入的连接请求。

sockfd参数是一个文件描述符,它引用类型为SOCK_STREAM或SOCK_SEQPACKET的套接字。

backlog参数定义sockfd的未决连接队列可以增长到的最大长度。如果在队列已满时连接请求到达,则客户端可能会收到带有ECONNREFUSED指示的错误,或者,如果基础协议支持重新传输,则可以忽略该请求,以便以后在连接时重新尝试成功。

返回值

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

错误说明

EADDRINUSE
另一个套接字已经在同一端口上侦听。
EADDRINUSE
(Internet域套接字)sockfd引用的套接字以前未绑定到地址,并且在尝试将其绑定到临时端口后,确定当前临时端口范围内的所有端口号都在使用中。请参阅ip(7)中对/ proc / sys / net / ipv4 / ip_local_port_range的讨论。
EBADF
参数sockfd不是有效的文件描述符。
ENOTSOCK
文件描述符sockfd不引用套接字。
EOPNOTSUPP
套接字不是支持listen()操作的类型。

遵循规范

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

备注

要接受连接,请执行以下步骤:

1.
使用socket(2)创建一个套接字。
2.
使用bind(2)将套接字绑定到本地地址,以便可以将其他套接字连接(2)。
3.
接受传入连接的意愿和传入连接的队列限制由listen()指定。
4.
连接被accept(2)接受。

POSIX.1不需要包含,并且在Linux上不需要此头文件。但是,某些历史(BSD)实现需要此头文件,而可移植的应用程序最好将其包括在内。

在Linux 2.2上,TCP套接字上的backlog参数的行为已更改。现在,它为等待接受的已完全建立的套接字指定队列长度,而不是未完成的连接请求数。可以使用/ proc / sys / net / ipv4 / tcp_max_syn_backlog设置不完整套接字的队列的最大长度。启用syncookie时,没有逻辑最大长度,并且此设置将被忽略。有关更多信息,请参见tcp(7)。

如果backlog参数大于/ proc / sys / net / core / somaxconn中的值,那么它将被静默截断为该值。从Linux 5.4开始,此文件的默认值为4096;默认值为4096。在早期的内核中,默认值为128。在2.4.25之前的内核中,此限制是硬编码值SOMAXCONN,其值为128。

示例

参见bind(2)。

另外参见

accept(2),bind(2),connect(2),socket(2),socket(7)

出版信息

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