linux下socket的连接队列的 backlog的分析

Posted 提拉没有米苏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下socket的连接队列的 backlog的分析相关的知识,希望对你有一定的参考价值。

建立socket连接的过程
1:client发syn请求给server
2:server收到后把请求放在syn queue中,这个半连接队列的最大值是系统参数tcp_max_syn_backlog定义的
3:存放在半连接队列后发送syn+ack给client
4:client收到后再发送syn+ack给server即完成三次握手,然后server把连接放在accept queue,这个队列长度就是程序里调用socket的时候定义的backlog定义大小
5:应用程序通过调用accept()到accpetqueue里获得连接
but 当accpet queue满了怎么办呢
注意:如果accpet队列满了,linux会出现一个异常处理,去判断tcp_abort_on_overflow系统参数是否为1,如果是1,则会发出拒绝客户端的终止讯息并断开连接。但是如果这个参数是0,那就坑爹了,对于溢出队列的连接,linux不会去管它,会继续正常建立连接,但是在accpetqueue里没有了

以上是关于linux下socket的连接队列的 backlog的分析的主要内容,如果未能解决你的问题,请参考以下文章

redis.conf详解之tcp-backlog

Linux下socket并发连接数怎么设置?

linux 下listen调用的backlog设为0,有何意义

Linux下解决高并发socket最大连接数限制,tcp默认1024个连接

Linux下解决高并发socket最大连接数限制,tcp默认1024个连接

Linux-TCP编程流程-Socket编程-单线程实现TCP客户端和服务端交互-多进程实现TCP客户端和服务端交互