このプロジェクトでは、プロトコルは次のとおりです。
- オープンソケット
- データを送る
- 確認メッセージまたはタイムアウトを待つ
- ack が適切なウィンドウに到着すれば、すべて問題ありません。ソケットを閉じる
- タイムアウトした場合は、ソケットを閉じて、N 回までやり直します。
ログで、タイムアウト後に ack を受信することがあることに気付きました。ソケットは閉じた後もクリーンアップとストラグラーのために開いたままなので、その理由は理解できます。
しかし、これを処理するより良い方法はありますか? ライン オペレータに何かを報告する前に、接続が本当にダウンしていることを確認したいと思います。
現在のタイムアウトは、外部タイマーに関連付けられた任意の値 (2.5 秒) です。.Net TCP スタックにはありません。