3

C/S アプリケーションがあります。クライアントは通常、TCP プロトコルを使用して大量のデータをサーバーに送信します。LAN環境(10MB/s)では問題なく動いていますが、WAN環境(200KB/s)に移行するとネットワークエラーが発生します。

バグを追跡しているとsend()、クライアントで -1WSAGetLastError()が返さWSAECONNABORTEDれ、最初に返されることがわかりました。そして数秒後、recv()in server も -1 とerrnoisを返しますECONNRESET

ドキュメントを参照した後、 と の基本的な理解が得WSAECONNABORTEDられましたECONNRESET。前者はネットワークの悪さが原因だと思います。再送信が何度か失敗した後、TCP がソケットを閉じます。後者は、クライアントでの予期しないクローズ操作が原因です。

この種のエラーをどのように処理するのだろうか。すぐに再接続しますか?または、どのソケットオプションが役立ちますか?

4

1 に答える 1

2

あなたは正しいです。

前者は、ネットワークの問題が原因です。できることは、新しいソケットで再試行することだけです。

後者はアプリケーション プロトコル エラーです。ピアが既に閉じている間に送信しています。これはアプリケーションのバグです。治療法は、バグを修正することです。

于 2016-03-10T20:39:44.207 に答える