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

    <code id='ao0ke'><strong id='ao0ke'></strong></code>
  • <fieldset id='ao0ke'></fieldset>

  • <i id='ao0ke'></i>
    <ins id='ao0ke'></ins>

    <dl id='ao0ke'></dl>

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

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

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

            • 时间:
            • 浏览:1
            • 来源: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 。