数学建模社区-数学中国

标题: 关于linux下socket的连接队列backlog的分析 [打印本页]

作者: 爱是你我    时间: 2015-4-14 11:39
标题: 关于linux下socket的连接队列backlog的分析
linux在对socket的连接队列的定义处理上个人觉得是有点坑爹的,闲话少说,直接开讲。
# r7 K) N7 Z& r$ G( x7 N" c% X
& w, D$ p: W/ S" n1 \0 B建立socket连接的过程:3 X/ G! a+ E4 U" d  e( K2 G, S# G
    1.client发syn请求给server 4 ]8 S* h. t3 p# X6 M9 a
    2.server收到后把请求存放在SYN queue里,这个半连接队列的最大值是系统参数               tcp_max_syn_backlog定义的
, ^. Y  K; I% T    3.存放在半连接队列后发送syn+ack给client,client收到后再发syn+ack给server完成三次握手,然后server把连接存放在accept queue ,这个队列长度就是程序里调用socket的时候定义的backlog定义大小。
+ B9 u  A; V$ e6 Q, f6 l    4.应用程序通过调用accept()到accept queue里获取连接。& v7 K6 c- M6 x& l6 Z' X8 `8 f4 C
    坑爹的特性来了!注意!6 Q' \# }+ q% o  {" b. G0 y% L
    当accept queue满了会怎么样?
) U4 q( s, D% Y9 [4 ?* P  E  K    !!注意!如果accept队列满了,linux会出现一个异常处理,去判断tcp_abort_on_overflow系统参数是否为1,如果为1 ,则会发出拒绝客户端的终止讯息并断开连接。但是如果这个参数是0,那就坑爹了!,对于溢出队列的连接,linux不会去管它,会继续正常建立连接,但是在accept queue里没有,那就意味着你的程序用accept()函数无法取的连接!这是多么的坑爹啊!!!根本查不出原因好么!!!各种被误导好么!!!尼玛linux啊!!) u$ ~" [7 \0 r





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5