QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6905|回复: 0
打印 上一主题 下一主题

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

[复制链接]
字体大小: 正常 放大

12

主题

9

听众

38

积分

升级  34.74%

  • TA的每日心情
    慵懒
    2015-5-5 09:35
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    自我介绍
    sdc
    跳转到指定楼层
    1#
    发表于 2015-4-14 11:39 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    linux在对socket的连接队列的定义处理上个人觉得是有点坑爹的,闲话少说,直接开讲。
    ) a4 @3 x6 ~0 n" j; k% n  @2 Y7 J% a3 h$ U0 H; B+ T: |
    建立socket连接的过程:
    3 v. a1 ]2 L5 N  q- u+ ?6 L    1.client发syn请求给server 9 l0 |* ?- Q1 \0 |0 d% e
        2.server收到后把请求存放在SYN queue里,这个半连接队列的最大值是系统参数               tcp_max_syn_backlog定义的
    7 q% E$ b9 z1 z, n( e  M5 M    3.存放在半连接队列后发送syn+ack给client,client收到后再发syn+ack给server完成三次握手,然后server把连接存放在accept queue ,这个队列长度就是程序里调用socket的时候定义的backlog定义大小。
    % p2 i( |- w* q8 O8 G    4.应用程序通过调用accept()到accept queue里获取连接。
    1 B4 ~; @+ w/ K/ F+ E( W$ m: C" a: d    坑爹的特性来了!注意!0 a8 Q% o5 G- r9 [! J+ C
        当accept queue满了会怎么样?
    4 P$ k5 ?9 g2 {* S; M4 H1 s, ^    !!注意!如果accept队列满了,linux会出现一个异常处理,去判断tcp_abort_on_overflow系统参数是否为1,如果为1 ,则会发出拒绝客户端的终止讯息并断开连接。但是如果这个参数是0,那就坑爹了!,对于溢出队列的连接,linux不会去管它,会继续正常建立连接,但是在accept queue里没有,那就意味着你的程序用accept()函数无法取的连接!这是多么的坑爹啊!!!根本查不出原因好么!!!各种被误导好么!!!尼玛linux啊!!
    & ~% S. Q3 O8 r6 |# w* o
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-9 20:40 , Processed in 0.477890 second(s), 52 queries .

    回顶部