我做了一个小型的C#服务器应用程序,以客户端模式测试GPRS调制解调器。有时在工作时我得到的SocketException
等于ErrorCode
等于10054,即WSAECONNRESET
。 NetworkStream.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/