如何使TCP套接字保持活动状态并检测断开连接?

时间:2016-02-11 22:19:53

标签: c# sockets tcp

在我的C#程序中,我使用TCP套接字进行通信。 当另一方没有正确地调用Shutdown / Close或其他什么时,Socket如何知道没有更多的连接。 例如,当互联网连接丢失时。 我从中学到的TCP就是发送keep alive包。这有什么标准值,它们发送的频率,我在哪里可以设置间隔以及如何设置断开连接超时(在没有收到连接时考虑连接之前等待的时间)?

1 个答案:

答案 0 :(得分:0)

如果套接字不发送或接收任何数据,那么根据定义,该套接字是活动的且打开的。一个TCP可以永久存在,只要两端知道它的当前状态,它就仍然可以工作。

您可能会遇到的问题是中间设备(例如有状态防火墙)为与终端设备无关的TCP连接保持超时,并且终端设备没有可见性。如果过了两三天甚至四天,一个设备工程师想在TCP通道上发送数据,如果中间设备无法继续发送数据,那么套接字将“断开连接”。

关于您有关tcp-keep-alive的问题-这取决于操作系统。

在Windows上,这是一个不错的文章:https://blogs.technet.microsoft.com/nettracer/2010/06/03/things-that-you-may-want-to-know-about-tcp-keepalives/