在 Linux 网络编程里,backlog 的单位是“连接数(connections)”,更准确地说,是等待被 accept 的已建立连接(已完成三次握手)的数量上限。
不过要注意几个历史细节和内核版本差异:
listen(sockfd, backlog) 里的 backlog 是什么int listen(int sockfd, int backlog);
传统含义:
backlog = 已完成连接(ESTABLISHED)但还没被 accept() 的队列长度上限
内核实际行为(Linux):
从 Linux 2.2 开始,backlog 同时影响两个队列(简化理解):
但并不是简单等于某个队列长度
在 Linux 中:
listen() 的 backlog 会被内核截断为:
min(backlog, /proc/sys/net/core/somaxconn)
默认 somaxconn = 128 或 4096(取决于发行版)
全连接队列长度 ≈ backlog
半连接队列长度由:
/proc/sys/net/ipv4/tcp_max_syn_backlog
控制
✅ backlog 的单位是:个(连接数)
不是:
listen(fd, 50);
意思是:
最多允许约 50 个已经建立好 TCP 连接、但还没被
accept()的客户端的排队
如果超过:
❌ “backlog 是并发连接数”
✅ 不是,只是等待 accept 的队列长度
❌ “backlog 越大越好”
✅ 太大可能拖慢故障发现,一般够用即可(如 128 / 512 / 1024)
如果你是想问:
可以继续问,我可以结合具体场景讲。