如果在传输所有数据之前拔出网络连接,则该连接不会空闲,因此在某些实现中,保持活动计时器不会启动。(请记住,keepalive不是TCP规范的一部分,因此它的实现方式根本不一致。)通常,由于指数补偿和大量重试(
tcp_retries2默认为15)的组合,它可能会占用在Keepalive计时器启动之前,传输需要30分钟才能重试超时。
解决方法(如果有)取决于您所使用的特定TCP实现。一些较新版本的Linux(2011年1月4日发布的内核版本2.6.37)实现了TCP_USER_TIMEOUT。
通常的建议是在应用程序级别实现通信超时,而不是始终使用基于TCP的keepalive。参见例如HTTP Keep-
Alive。



