【发布时间】:2021-06-28 08:52:36
【问题描述】:
客户端和服务器之间建立了tcp连接,客户端使用C# Socket。我发现如果服务器暂停(调试断点一段时间),BeginSend 或 BeginReceive 或它们的 AsyncCallback 将抛出异常或设置 SocketErrorCode 来告诉我连接未连接或重置。根据服务器端错误码可以知道连接被客户端重置。但是,我从不调用 socket::disconnect 或 close,断开连接是由 .net 本身完成的,这是不需要的。它使调试变得不切实际。
我想,如果其他对等方暂停,则 BeginSend 和 BeginRecv 的 AsyncCallback {EndReceive(ar) 或 EndSend(ar)} 应该阻塞,直到对等方恢复执行,因为我没有设置保持活动或任何超时。然而,事实并非如此,.net 似乎有一个超时来关闭连接。
如何避免这种情况?
【问题讨论】:
-
恐怕就是这样,调试socket应用的时候。