据我所知,有两种解决半开放连接问题的方法。一个是心跳技术。另一个是我的问题:保持-活着。
我知道让三性保持活力就像:
tcp_keepalive_time \ tcp_keepalive_intvl \ tcp_keepalive_probes.
我让他们
5秒\1秒\ 10
这意味着要保持活动例程等待5秒,然后发送第一个保活探针,然后每1秒重新发送一次。如果连续10次没有收到ACK响应,则将连接标记为断开。
我在linux C++代码中通过调用setsockopt()为它启用了“保持活动”并设置了这些属性,有时,它运行良好,如下所示:

但在另一时间,“保持生存”的不发送,而重传消息被发送并塞进:

它只发送7次(每次重发之间的时间大于1秒,几乎2~5秒)。然后被塞了很长时间。
那么,为什么TCP有时不保持存活呢?我怎样才能确保一直都能发出保持生命的探测器。我该做点别的吗?
谢谢你的帮助。
编辑
发布于 2013-09-23 04:26:01
在我看来,这就像是一次未被确认的传输后的指数退避。TCP_MAXRT将允许您设置您想要等待多长时间才能放弃尝试传输。TM_TCP_MAX_REXMIT将允许您设置重试的最大次数。
https://stackoverflow.com/questions/18951457
复制相似问题