首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tcp保活基本查询

tcp保活基本查询
EN

Stack Overflow用户
提问于 2015-03-13 16:30:43
回答 2查看 116关注 0票数 0

我的应用程序有tcp套接字。以10秒频率启用TCP keep alive。

此外,我每隔1秒就会有消息在应用程序和服务器之间流动,以获取状态。

因此,由于有消息以更快的速度在套接字上流动,所以根本就不会有保持活动流动。

现在,考虑以下场景:远程服务器关闭,因此周期性消息发送(每1秒发生一次)连续失败3-5次。我不认为通过启用tcp keep alives,我们可以检测到套接字已损坏,对吧?

然后,我们是否必须在代码中构建逻辑,以确保如果此周期性消息连续失败一定次数,则另一端将被假定为已死?

让我知道。

EN

回答 2

Stack Overflow用户

发布于 2015-03-13 17:09:01

在您的应用程序中,启用keep alive没有任何意义。Keep alive适用于具有开放连接的应用程序,并且不会一直使用它,因为您一直在使用它,因此不需要保持连接。当您发送某些内容时,另一端已崩溃,客户端上的TCP将发送所有重新传输,并增加超时。最后,如果你有一个阻塞套接字,你会在发送操作上得到一个错误指示,你知道你必须关闭套接字并重试一个连接。错误指示是套接字操作的返回码< 0。我不知道这些超时的价值,但它可以达到一分钟或更长时间。当服务器正常关闭时,这意味着它将关闭其发送套接字的操作,您将通过接收套接字上的0字节来获取该信息。

你可能也想看看我昨天的回答:

Reset TCP connection if server closes/crashes mid connection

票数 1
EN

Stack Overflow用户

发布于 2015-03-13 17:10:35

不,你不需要做任何假设。连接将中断,因为发送将超时或保持活动将超时。无论哪种方式,连接都将断开,并且您将开始在读取和写入时出现错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29027783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档