gpt4 book ai didi

c# - WSAECONNRESET 异常和 Socket.Receive 返回 0 的情况有什么区别?

转载 作者:行者123 更新时间:2023-11-30 16:16:25 26 4
gpt4 key购买 nike

我做了一个小型 C# 服务器应用程序来测试客户端模式下的 GPRS 调制解调器。有时在工作时我得到一个 SocketExceptionErrorCode 等于 10054,即 WSAECONNRESETNetworkStream.ReadByte() 调用期间发生异常,这意味着现有连接已被远程主机强行关闭。好的,但是当我使用客户端应用程序而不是调制解调器并在其中调用 Socket.Close() 时,服务器端的 NetworkStream.ReadByte() 只返回 -1

那么导致WSAECONNRESET异常的情况和client手动关闭socket的情况有什么区别呢?

最佳答案

当通过 Socket.Close() 关闭连接时,将通过 TCP 机制将此通知对等方。当客户端崩溃、关闭(被杀死)、主机崩溃、连接中断(被防火墙..)等时,服务器给出异常。

来自微软:

WSAECONNRESET (10054)

连接被对端重置。

现有连接被远程主机强行关闭。如果远程主机上的对等应用程序突然停止,主机重新启动,主机或远程网络接口(interface)被禁用,或者远程主机使用硬关闭,通常会导致这种情况(有关远程主机上 SO_LINGER 选项的更多信息,请参见 setsockopt socket )。如果在一个或多个操作正在进行时由于保持事件检测到故障而导致连接中断,也可能会导致此错误。正在进行的操作因 WSAENETRESET 而失败。随后的操作因 WSAECONNRESET 而失败。

关于c# - WSAECONNRESET 异常和 Socket.Receive 返回 0 的情况有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18397391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com