1 ミリ秒スリープし、WSASYSCALLFAILURE が報告されたときに WSAGetOverlapped の結果を再試行することで、この問題を解決したようです。
データがなくても、重複したイベントの発生に関連する別の問題がありました。これも最初に解決する必要がありました。現在、テストは 1 時間以上実行されており、いくつかの WSASYSCALLFAILURE が正しく処理されています。夜間のテストも成功することを願っています。
@Len: ご協力ありがとうございます。
編集: オーバーナイト テストは成功しました。私のバグは、相互に依存する 2 つの問題によって引き起こされました。
問題 1: ConnectionSet::select の WaitForMultipleObjects が空のソケットでデータを送信することがあり、SocketConnection::readSync がデッドロックする。修正:各パケットの最初のバイトでノンブロッキング読み取りを実行します。ソケットが空の場合は ConnectionSet をリセットします
問題 2: WSAGetOverlappedResult がときどき WSASYSCALLFAILURE を返し、TCP ストリームで非同期が発生します。修正:短いスリープ期間の後、 WSAGetOverlappedResult を再試行します。
http://equalizer.svn.sourceforge.net/viewvc/equalizer?view=revision&revision=4649