2015-03-13 79 views
0

我有我的应用程序的tcp套接字。使用10秒的频率启用TCP保持活动状态。tcp保持活着基本查询

此外,我还在每秒1秒之间在应用程序和服务器之间流动以获取状态。

因此,由于无论如何都会以更快的速度在套接字上流动消息,所以根本不会有活跃的流动。

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

我们是否必须在我们的代码中建立逻辑来确保如果这个周期性的msg连续失败了一定次数,另一端会被认为是死的?

让我知道。

回答

1

在您的应用程序中,启用保持活动是没有意义的。 保持活跃是为了有一个开放的连接的应用程序,并没有一直使用它,你一直在使用它,所以不需要保持活着。 当你发送一些内容并且另一端崩溃时,客户端上的TCP会以递增的超时发送所有重传。最后,如果你有一个阻塞套接字,那么你很可能会在发送操作中得到一个错误指示,你知道你必须关闭套接字并重新尝试连接。 错误指示是插座操作的返回代码是< 0. 我不知道这些超时值的重点,但它可能会长达一分钟或更长时间。 当服务器正常关闭时,意味着它将关闭其发送的套接字,您将通过在您的接收套接字上接收0字节来获取该信息。

你可能会想看看我昨天的答案,以及:

Reset TCP connection if server closes/crashes mid connection

0

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