在C语言中的socket编程中,我对于somaxconn参数一无所知(在Linux Ubuntu系统下)。我查找了多个网站,但是都没有帮助我太多。
listen(sockfd,SOMAXCONN);
这是否意味着同时并发监听最大数量的连接套接字?
#include <sys/socket.h>
int listen (int socket, int backlog);
backlog参数为实现提供了一个提示,该实现将使用该提示来限制套接字监听队列中未完成连接的数量。实现可能会对backlog施加限制并静默地减少指定的值。通常情况下,较大的backlog参数值将导致监听队列的长度更大或相等。实现应支持最多个backlog值,该常量在中定义。
如果使用小于0的backlog值调用
listen()
,则函数的行为就像使用0的backlog值调用一样。0的backlog参数可能允许套接字接受连接,在这种情况下,监听队列的长度可以设置为实现定义的最小值。
来源:这里
简单来说,backlog 就是你想在一个套接字上排队的最大连接数。这个队列存在是为了让你能够处理来自客户端的连接,而其他客户端则需要在队列中等待。通过 backlog 参数,你可以确定你希望这个队列的长度有多长。如果有更多客户端尝试连接到你的服务器,超过了 backlog 的数量,那么这些连接将会被丢弃。
SOMAXCONN
定义了你可以传递给 listen()
的最大数量,在我的系统上它的值是 128
。
你可以在man page中了解更多信息。