int listen(int fd, int backlog);

socket系统调用listen只被tcp 服务器使用,他做两件事:
1. 将未链接的套接口转换为被动套接口,指示内核接受向此套接口的连接请求,调用此系统调用后tcp 状态机有close转换到listen.
2.第二个参数制定了内核为此套接口排队的最大连接个数。
关于第二个参数,对于给定的监听套接口,内核要维护两个队列,未链接队列和已连接队列,根据tcp 三路握手过程中三个分节来分隔这两个队列。
  服务器处于listen状态时收到客户端syn 分节(connect)时在未完成队列中创建一个新的条目,然后用三路握手的第二个分节即服务器的syn 响应及对客户端syn的ack,此条目在第三个分节到达前(客户端对服务器syn的ack)一直保留在未完成连接队列中,如果三路握手完成,该条目将从未完成连接队列搬到已完成连接队列尾部。当进程调用accept时,从已完成队列中的头部取出一个条目给进程,当已完成队列为空时进程将睡眠,直到有条目在已完成连接队列中才唤醒。
 backlog被规定为两个队列总和的最大值,大多数实现默认值为5,但在高并发web服务器中此值显然不够,lighttpd中此值达到128*8.需要设置此值更大一些的原因是未完成连接队列的长度可能因为客户端SYN的到达及等待三路握手第三个分节的到达延时而增大。
当客户端发起connect而导致发送syn分节给服务器端握手,如果这时两个队列都是满的,tcp就忽略此分节,并且不发RST,这将导致客户端TCP重发SYN(超时),服务器端忽略syn而不发RST响应的原因是如果发RST ,客户端connect将立即返回错误,强制客户端进程处理这种情况,而不是让tcp的正常重传机制来处理。实际上所有源自Berkeley的实现都是忽略新的SYN分节。
还有,backlog为0 时在linux上表明润许不受限制的连接数,这是一个缺陷,因为它可能会导致SYN Flooding(拒绝服务型攻击), 下一篇文章会简单解释。

linux 系统tcp /ip协议栈有个选项可以设置未链接队列大小

tcp_max_syn_backlog

cat /proc/sys/net/ipv4/tcp_max_syn_backlog 
1024

参考:

unix network programming

http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/023/2333/2333s2.html

TCP listen() Backlog 参数详解相关推荐

  1. Redis配置文件redis.conf参数详解

    redis.conf配置文件参数详解 # Redis configuration file example.########################################## GEN ...

  2. TCP/IP五层模型详解

    TCP/IP五层模型详解 应用层 HTTP:简单的明文传输的请求--响应协议 HTTP数据结构: 首行 头部 空行 正文 浏览器的控制 HTTPS 定义 CA认证 SSL加密流程: 混合对称加密过程: ...

  3. php-fpm启动条件,php-fpm 启动参数及php-fpm.conf重要参数详解

    php-fpm 启动参数基本关联相关文件的位置,假设文件位置位于如下: /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr ...

  4. LNMP nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache编译安装+opcache参数详解+opcache可视化php页面代码

    可能要用到的软件: libiconv-1.13.tar.gz  libmcrypt-2.5.8.tar.gz  mcrypt-2.6.8.tar.gz  mhash-0.9.9.9.tar.gz  m ...

  5. 网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解

    1.SO_REUSEADDR: 在BSD中,SO_REUSEADDR选项有两个用户: 如果有socket绑定了0.0.0.0:port:设置该参数后,其他socket可以绑定本机ip:port.(该功 ...

  6. ping ip 端口_学生会私房菜【20200305期】——Ping命令及其常用参数详解

    一命令原理 Ping是ICMP的一个典型应用.Ping是检测网络连通的常用工具,同时也能收集其他相关信息.用户可以在Ping命令中指定不同参数,如ICMP报文长度.发送的ICMP报文个数.等待回复响应 ...

  7. MySQL配置文件参数详解

    [client] port = 3307 socket = /usr/local/mysql5_6/mysql.sock default-character-set=utf8 [mysql] prom ...

  8. Nginx内置变量以及日志格式变量参数详解

    Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...

  9. 【Nginx】Nginx配置文件参数/启动参数详解;启动/停止/重新加载配置命令

    nginx配置文件 nginx及其模块的工作方式是由配置文件指定,默认情况下配置文件被命名为nginx.conf并且存放在/usr/local/nginx/conf或者 /etc/nginx或者 /u ...

最新文章

  1. 未排序数组中累加和为给定值的最长子数组系列问题
  2. hdu- 5015 233 Matrix
  3. python3 2.00gb怎么去掉单位_最值得期待的Python 3.9的新功能
  4. B00013 字符串哈希函数
  5. Tyvj 1176 火焰巨魔的惆怅
  6. 信息学奥赛一本通(1412:二进制分类)
  7. mtensor一个tensor计算库,支持cuda延迟计算
  8. pytest与unittest区别
  9. ai怎么画路线_AI换脸的本质是把颜值和表情分开
  10. snipaste安装和使用_snipaste替代品 amp; linux截图解决方案-截图、贴图工具Flameshot...
  11. golang 如何通过cron 表达式解析出上一次触发时间
  12. NRF52840 BLE OTA
  13. BUGKU writeup
  14. 仿购物网站-HTML手写代码(仅提供参考)
  15. 计算机图画大赛作品六年级,小学学生电脑绘画比赛活动方案-20210407071921.docx-原创力文档...
  16. 30岁宝妈转行UI设计,后来怎么样了?
  17. 厦大C语言上机1378
  18. mysql explain不准确_mysql explain预估剖析
  19. 三种最流行的商业模式解析:让顾客感觉占便宜,你才能赚更多钱
  20. QRCode资料收集

热门文章

  1. ubuntu16.04设置静态IP
  2. 用互斥锁实现程序只能有一个实例
  3. javaWeb项目中获取ip为 0:0:0:0:0:0:0:1
  4. Eclipse出现Class Not Found异常时可以参考我所知道的一个方案
  5. VS2017创建Linux项目实现远程GDB调试
  6. AndroidStudio-引用jar包及so文件
  7. 文字处理的标签及属性
  8. 第五节 面向对象相关特性
  9. 【转】十分有用的linux shell学习总结
  10. C#使用HTTP头检测网络资源是否有效