在C语言套接字编程中,SOMAXCONN代表什么意思?

27

在C语言中的socket编程中,我对于somaxconn参数一无所知(在Linux Ubuntu系统下)。我查找了多个网站,但是都没有帮助我太多。

listen(sockfd,SOMAXCONN);

这是否意味着同时并发监听最大数量的连接套接字?

2个回答

22
#include <sys/socket.h>

int listen (int socket, int backlog);

backlog参数为实现提供了一个提示,该实现将使用该提示来限制套接字监听队列中未完成连接的数量。实现可能会对backlog施加限制并静默地减少指定的值。通常情况下,较大的backlog参数值将导致监听队列的长度更大或相等。实现应支持最多个backlog值,该常量在中定义。

如果使用小于0的backlog值调用listen(),则函数的行为就像使用0的backlog值调用一样。

0的backlog参数可能允许套接字接受连接,在这种情况下,监听队列的长度可以设置为实现定义的最小值。

来源:这里


6
对于那些可能需要轻松记住 SOMAXCONN 的含义的人来说,我认为它是 Socket Outstanding MAX CONNections 的缩写。我可能错了,但这样有助于让我记住! :-) - rhgrant10
10
更可能的是,也更加符合其他BSD套接字定义的方式,SOcket MAXimum CONNections或SOcket MAXimum CONnection Number。 - uchuugaka

14

简单来说,backlog 就是你想在一个套接字上排队的最大连接数。这个队列存在是为了让你能够处理来自客户端的连接,而其他客户端则需要在队列中等待。通过 backlog 参数,你可以确定你希望这个队列的长度有多长。如果有更多客户端尝试连接到你的服务器,超过了 backlog 的数量,那么这些连接将会被丢弃。

SOMAXCONN 定义了你可以传递给 listen() 的最大数量,在我的系统上它的值是 128

你可以在man page中了解更多信息。


1
这些连接将被Windows断开。它们将被其他平台忽略,这将导致客户端重试几次,如果仍然没有响应,则会超时。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接