3

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

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

4

1 回答 1

3

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

来自微软:

WSAECONNRESET (10054)

对等方重置连接。

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

于 2013-08-23T10:30:51.893 回答