C/S アプリケーションがあります。クライアントは通常、TCP プロトコルを使用して大量のデータをサーバーに送信します。LAN環境(10MB/s)では問題なく動いていますが、WAN環境(200KB/s)に移行するとネットワークエラーが発生します。
バグを追跡しているとsend()
、クライアントで -1WSAGetLastError()
が返さWSAECONNABORTED
れ、最初に返されることがわかりました。そして数秒後、recv()
in server も -1 とerrno
isを返しますECONNRESET
。
ドキュメントを参照した後、 と の基本的な理解が得WSAECONNABORTED
られましたECONNRESET
。前者はネットワークの悪さが原因だと思います。再送信が何度か失敗した後、TCP がソケットを閉じます。後者は、クライアントでの予期しないクローズ操作が原因です。
この種のエラーをどのように処理するのだろうか。すぐに再接続しますか?または、どのソケットオプションが役立ちますか?