【发布时间】:2016-02-11 22:19:52
【问题描述】:
在我的 C# 程序中,我使用 TCP 套接字进行通信。 当另一方没有正确调用 Shutdown/Close 或其他什么时,Socket 如何知道没有更多的连接。 例如,当 Internet 连接丢失时。 我对 TCP 的了解是它发送保持活动数据包。什么是标准值,它们发送的频率,我可以在哪里设置间隔以及如何设置断开超时(当没有收到任何东西时,在连接被认为断开之前等待的时间)?
【问题讨论】:
-
默认情况下 TCP 不发送/接收 keepalive,如果不尝试与对等方交换数据,则无法确定可达性丢失。如果您只是在等待 recv() 调用,您可能会一直等待。
-
Stephen Cleary 有一个了不起的article on Half-Open Sockets。老实说,他博客上的常见问题解答中包含的信息对于理解 TCP 套接字作为一个整体来说是无价的。 Here is the overview for his FAQ 我会给那些可靠的阅读。
-
这已经被报道了100次。我相信搜索引擎会回答所有这些问题。
-
我当然使用过搜索引擎,但没有令人满意的结果,也找不到任何关于标准值的信息。例如,这仅说明了有关使用 keep alives 的内容,但没有进一步解释:msdn.microsoft.com/library/…