在 Linux 网络编程和系统管理中,backlog 这个词最常出现在 TCP 监听 socket 的上下文中,也偶尔用于其他队列场景。下面分层次说明。
int listen(int sockfd, int backlog);
在历史上(和不同内核版本中),backlog 的含义发生过变化,但现代 Linux中:
backlog 是“未完成连接” + “已完成连接”的总和上限(近似)
更准确地说,Linux 内核使用两个队列:
net.ipv4.tcp_max_syn_backlog 影响listen() 的 backlog 和 somaxconn 限制实际 accept 队列长度 = min(backlog, net.core.somaxconn)
backlog:应用程序设置somaxconn:系统级上限(默认通常 128 或 4096)Linux 中 listen 的 backlog,主要限制“已完成但未被 accept 的连接数”,并间接影响半连接队列大小
一个 listen socket 的 backlog 覆盖:
✅ 已收到 SYN,未完成握手
✅ 已完成三次握手,等待 accept()
❌ 已被 accept() 的连接(不再属于 backlog)
listen(fd, backlog)listen() 的 backlog不是:
somaxconn 限制accept() 之前连接被丢弃# 查看系统上限
cat /proc/sys/net/core/somaxconn
# 修改
sysctl -w net.core.somaxconn=1024
# SYN 队列
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
如果你是指:
可以告诉我,我可以更针对性讲解。