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

那么,导致WSAECONNRESET异常的情况与客户端手动关闭套接字的情况之间有什么区别?

最佳答案

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

从Microsoft:

WSAECONNRESET(10054)

对等方重置连接。

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

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

10-11 02:06