具有定期发送功能的套接字保持活动

时间:2018-12-20 20:31:15

标签: sockets

我有一个C / C ++应用程序,设置如下:

  • Linux平台上的非阻塞TCP服务器套接字
  • 一个以1 Hz的频率将小的数据包(小于20个字节)写入套接字的线程
  • 该套接字配置为启用keepalive并使用:keepidle = 5,keepintvl = 5和keepcnt = 3

我的意图是keepalive机制应该检测到网络链路的物理断开连接。但是,当链接断开时,我看不到应该由keepalive机制生成的零长度数据包(我正在使用tcpdump监视流量)。我的印象是,将发生以下情况:断开电缆连接后,应用程序将继续发出发送请求,并且存在待处理的发送请求这一事实阻止了keepalive机制的激活。这个解释有效吗?

为了检查我的解释,我对测试进行了如下修改:

  • Linux平台上的非阻塞TCP服务器套接字
  • 一个周期性的线程,它以30秒的周期向套接字写入一个小包(约100个字节)
  • 该套接字配置为启用keepalive并使用:keepidle = 5,keepintvl = 5和keepcnt = 2

在这种情况下,如果我断开连接,则保持活动机制将在大约15-20秒内触发(这是我期望的)。

关于一个相关的观点,我想了解tcp_keepidle的确切语义。定义为:“在TCP开始发出保持活动探测之前,连接需要空闲的秒数”。在这种情况下,“空闲”到底意味着什么?这仅仅是意味着什么也没收到,什么也没放在网络上吗?还是意味着什么都没收到,并且没有向套接字发出发送请求?

0 个答案:

没有答案