首页 > 解决方案 > 带有定期发送的套接字 Keepalive

问题描述

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

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

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

在这种情况下,如果我切断连接,keepalive 机制会在大约 15-20 秒内触发(这是我所期望的)。

在相关的一点上,我想了解tcp_keepidle. 这被定义为:“在 TCP 开始发送保持活动探测之前,连接需要空闲的秒数”。在这种情况下,“空闲”到底是什么意思?是否只是意味着什么都没有收到,也没有任何东西放在网络上?或者这是否意味着没有收到任何内容并且没有向套接字发出发送请求?

标签: sockets

解决方案


推荐阅读