我有一个C / C ++应用程序,设置如下:
keepalive
并使用:keepidle
= 5,keepintvl
= 5和keepcnt
= 3 我的意图是keepalive
机制应该检测到网络链路的物理断开连接。但是,当链接断开时,我看不到应该由keepalive
机制生成的零长度数据包(我正在使用tcpdump监视流量)。我的印象是,将发生以下情况:断开电缆连接后,应用程序将继续发出发送请求,并且存在待处理的发送请求这一事实阻止了keepalive机制的激活。这个解释有效吗?
为了检查我的解释,我对测试进行了如下修改:
keepalive
并使用:keepidle
= 5,keepintvl
= 5和keepcnt
= 2 在这种情况下,如果我断开连接,则保持活动机制将在大约15-20秒内触发(这是我期望的)。
关于一个相关的观点,我想了解tcp_keepidle
的确切语义。定义为:“在TCP开始发出保持活动探测之前,连接需要空闲的秒数”。在这种情况下,“空闲”到底意味着什么?这仅仅是意味着什么也没收到,什么也没放在网络上吗?还是意味着什么都没收到,并且没有向套接字发出发送请求?