質問: なぜ、System.Net.Sockets.Socket.AcceptAsyncは、長時間の非アクティブ後にConnectionResetで完了しますか? 有効な `SocketAsyncEventArgs` で `Socket.AcceptAsync` を呼び出し、 `SocketAsyncEventArgs.Completed` イベントを正しく設定して、非常に長い時間、接続をリセットするだけです。しかし、私の `Socket.ReceiveTimeout` と `Socket.SendTimeout` はどちらもゼロです。 私はどのように接続を受け入れるためのタイムアウトを設定するか、それが良いアイデアであっても不明です。回避策があり、これがデフォルトの動作である理由に関する情報がありますか? Microsoft Connectにバグ報告を提出して、彼らが何かの理由があるかどうかを確認してくださいタイムアウト期間が不安定な理由場合によっては5分後にタイムアウトし、2時間以上経過するとタイムアウトすることがあります。
回答: After playing around with this for a bit I have found that a single SYN -> SYN-ACK -> RST sequence will raise the `SocketAsyncEventArgs.Completed` event and cause the `SocketAsyncEventArgs.SocketError` property to become `SocketError.ConnectionReset`. It appears this is expected behavior but it's definitely a gotcha and should be documented better. サーバーをスキャンして半開きのSYN型スキャンを実行するポートは、同様のトラフィックを生成し、同じ問題を引き起こします。ソフトウェアのサービス拒否の脆弱性を防ぐために、この特別な条件を処理する必要があります。