我对listen系统调用中的backlog值有疑问。根据listen系统调用的man页面:
如果backlog参数大于/proc/sys/net/core/somaxconn中的值,则会被静默截断为该值;此文件中的默认值为128。
这意味着我的服务器一次只能接受小于128个连接。如果我想要接受更多的连接,比如大于128个,我应该怎么做?我可以简单地将该值设置为可能的最大数字,以便我可以访问更多的连接吗?
这个数字只是“连接队列”的大小,新的连接会在这里等待被接受。一旦你的应用程序调用了accept()
,一个等待的连接就会从队列中移除。因此,你绝对可以处理超过128个同时连接,因为它们通常只在队列中停留很短的时间。
待处理队列的值并不是最大连接数,而是未处理连接的数量,即您尚未accept()的连接。