【问题标题】:C# Socket BeginSend BeginReceive cause disconnect actionC# Socket BeginSend BeginReceive 导致断开操作
【发布时间】: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应用的时候。

标签: c# sockets


【解决方案1】:

我的错误,服务器代码在我没有注意到的某个地方超时后主动断开连接,并且 socket.read 返回的错误代码未检查,所以我责怪.net,对不起。 .net 是正确的,我认为 EndReceive(ar) 上的 recv 回调阻塞,直到对端恢复执行以释放发送数据

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多