3

クライアント モードで GPRS モデムをテストするために、小さな C# サーバー アプリケーションを作成しました。作業中に 10054 に等しい値を取得することがSocketExceptionありErrorCodeますWSAECONNRESETNetworkStream.ReadByte()呼び出し中に例外が発生し、既存の接続がリモート ホストによって強制的に閉じられたことを意味します。わかりましたが、モデムの代わりにクライアント アプリケーションを使用してそれを呼び出すSocket.Close()と、NetworkStream.ReadByte()サーバー側では単純に が返されます-1

WSAECONNRESETでは、例外が発生した状況と、クライアントが手動でソケットを閉じた場合の状況の違いは何ですか?

4

1 に答える 1

3

Socket.Close() を介して接続が閉じられると、TCP メカニズムを介してピアに通知されます。クライアントがクラッシュしたり、シャットダウン(強制終了)されたり、ホストがクラッシュしたり、接続が(ファイアウォールによって..)中断されたりすると、サーバーに例外が与えられます。

マイクロソフトから:

WSAECONNRESET (10054)

ピアによって接続がリセットされました。

既存の接続がリモート ホストによって強制的に閉じられました。これは通常、リモート ホスト上のピア アプリケーションが突然停止した場合、ホストが再起動された場合、ホストまたはリモート ネットワーク インターフェイスが無効になった場合、またはリモート ホストがハード クローズを使用した場合に発生します (リモート ホストの SO_LINGER オプションの詳細については、setsockopt を参照してください)。ソケット)。このエラーは、1 つ以上の操作の進行中にキープアライブ アクティビティが障害を検出したために接続が切断された場合にも発生する可能性があります。進行中の操作は、WSAENETRESET で失敗します。以降の操作は、WSAECONNRESET で失敗します。

于 2013-08-23T10:30:51.893 に答える