当Socket.Receive返回0时,WSAECONNRESET异常和情况有什么区别?

时间:2013-08-23 07:39:06

标签: c# sockets winapi winsock

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

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

1 个答案:

答案 0 :(得分:3)

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

来自Microsoft:

WSAECONNRESET(10054)

通过对等方重置连接。

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