<i id='uei2t'></i>
    <acronym id='uei2t'><em id='uei2t'></em><td id='uei2t'><div id='uei2t'></div></td></acronym><address id='uei2t'><big id='uei2t'><big id='uei2t'></big><legend id='uei2t'></legend></big></address>

    <code id='uei2t'><strong id='uei2t'></strong></code>
  1. <fieldset id='uei2t'></fieldset>

      <i id='uei2t'><div id='uei2t'><ins id='uei2t'></ins></div></i>

    1. <dl id='uei2t'></dl>
    2. <tr id='uei2t'><strong id='uei2t'></strong><small id='uei2t'></small><button id='uei2t'></button><li id='uei2t'><noscript id='uei2t'><big id='uei2t'></big><dt id='uei2t'></dt></noscript></li></tr><ol id='uei2t'><table id='uei2t'><blockquote id='uei2t'><tbody id='uei2t'></tbody></blockquote></table></ol><u id='uei2t'></u><kbd id='uei2t'><kbd id='uei2t'></kbd></kbd>
    3. <span id='uei2t'></span>
        <ins id='uei2t'></ins>

          Linux操作系统下TCP keepalive属性查看

          • 时间:
          • 浏览:17
          • 来源:124软件资讯网

            Tcp是面向毗连的,在现实应用中通常都需要检测毗连是否还可用.若是不行用,可分为:

            a. 毗连的对规矩常关闭.

            b. 毗连的对端非正常关闭,这包罗对端装备掉电,法式瓦解,网络被中止等.这种情形是不能也无法通知对端的,以是毗连会一直存在,铺张国家的资源.

            tcp协议栈有个keepalive的属性,可以自动探测socket是否可用,不外这个属性的默认值很大.

            全局设置可更改/etc/sysctl.conf,加上:

            net.ipv4.tcp_keepalive_intvl = 20
            net.ipv4.tcp_keepalive_probes = 3
            net.ipv4.tcp_keepalive_time = 60

            在法式中设置如下:

            #include
            #include
            #include
            #include
            #include
            int keepAlive = 1; // 开启keepalive属性
            int keepIdle = 60; // 如该毗连在60秒内没有任何数据往来,则举行探测
            int keepInterval = 5; // 探测时发包的时间距离为5 秒
            int keepCount = 3; // 探测实验的次数.若是第1次探测包就收到响应了,则后2次的不再发.

            setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
            setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
            setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
            setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

            在法式中体现为,当tcp检测到对端socket不再可用时(不能发出探测包,或探测包没有收到ACK的响应包),select会返回socket可读,而且在recv时返回-1,同时置上errno为ETIMEDOUT  。