1

私の C++ アプリケーションでは、recv関数をループで使用しています。recv 関数から負の値を取得して、ネットワーク接続の問題を特定したいと考えています。

私のテストで確認できることの 1 つは、ネットワーク ケーブルを外したときに、アプリケーションがこの負の値を取得したことを確認できるまで 1 分ほど待つことができるということです。

ネットワーク接続の問題が発生したことを C++ コードが認識するまでの時間はどれくらいか知っていますか? 今回はなんとかなるかな?

4

2 に答える 2

0

C++ コードとは関係ありません。使用している特定のネットワーク プロトコルと関係があります。TCPだと仮定すると、基本的に永遠です。アイドル状態の TCP 接続にはパケットが関連付けられておらず、接続の切断が検出されない場合があります。

特定のインターフェースの喪失を検出したい場合は、プラットフォームのインターフェース状態監視機能を使用してください。

于 2011-11-22T19:04:29.640 に答える
0

TCP のみのレベルでこれを行う適切な方法はありません。これを目的としたオプションは ですがSO_KEEPALIVE、かなり役に立ちません。

アプリケーションレベルのハートビートを実装し、指定された時間内にデータまたはハートビートが受信されなかった場合にソケットが切断されたことをマークします (これは、ノンブロッキング モード、または少なくともselect(2)タイムアウトのあるループを前提としています)。

于 2011-11-22T19:04:45.143 に答える