我的应用程序有tcp套接字。以10秒频率启用TCP keep alive。
此外,我每隔1秒就会有消息在应用程序和服务器之间流动,以获取状态。
因此,由于有消息以更快的速度在套接字上流动,所以根本就不会有保持活动流动。
现在,考虑以下场景:远程服务器关闭,因此周期性消息发送(每1秒发生一次)连续失败3-5次。我不认为通过启用tcp keep alives,我们可以检测到套接字已损坏,对吧?
然后,我们是否必须在代码中构建逻辑,以确保如果此周期性消息连续失败一定次数,则另一端将被假定为已死?
让我知道。
发布于 2015-03-13 17:09:01
在您的应用程序中,启用keep alive没有任何意义。Keep alive适用于具有开放连接的应用程序,并且不会一直使用它,因为您一直在使用它,因此不需要保持连接。当您发送某些内容时,另一端已崩溃,客户端上的TCP将发送所有重新传输,并增加超时。最后,如果你有一个阻塞套接字,你会在发送操作上得到一个错误指示,你知道你必须关闭套接字并重试一个连接。错误指示是套接字操作的返回码< 0。我不知道这些超时的价值,但它可以达到一分钟或更长时间。当服务器正常关闭时,这意味着它将关闭其发送套接字的操作,您将通过接收套接字上的0字节来获取该信息。
你可能也想看看我昨天的回答:
Reset TCP connection if server closes/crashes mid connection
发布于 2015-03-13 17:10:35
不,你不需要做任何假设。连接将中断,因为发送将超时或保持活动将超时。无论哪种方式,连接都将断开,并且您将开始在读取和写入时出现错误。
https://stackoverflow.com/questions/29027783
复制相似问题