asioを使用する非同期TCP/IPクライアントがあります。接続が失われたとき、async_readの私のハンドル関数はエラーを受け取ります。だから私は接続が失われたことを知らされています。boost asio:tcp接続がアクティブであることを監視する方法
ここでは、同期型TCP/IPクライアントを実装するいくつかのレガシーコードをリファクタリングしています。抽象的なインターフェイスでこのシーケンスが適用されます。同期書き込み、同期読み取りです。 asioでそれを行うことはかなり簡単ですが、接続が失われた場合は非同期的に知りたいと思います。
よりエレガントな方法があります:
オプションA: を読み取ろうとすることによって(ソケットがまだ生きているかどうかを確認するスレッドを追加...しかし、どのように私は読むことを確認することができますが、私の同期リードからデータを盗むしないBoost asio ip tcp iostream Error Detectionを参照してください)
オプションB:? 利用代わりasync_readと、同期をエミュレートし、私はシンという想像
私は答えがノーだと思います。たぶんいくつかのプラットフォーム固有のソリューションがあります。 – mirk
私は、TCPプロトコルが特定の時間枠内で送信されたパケットへの肯定応答を受信しない限り、接続障害を検出できないと思います。 – Ferruccio
私はオプションBを実装しました。しかし、理解できない2つのことがあります。1.切断は検出されません。2.サーバー(プリンタ)のイーサネットケーブルを外しても、エラーは返されません。 2回目だけ、エラーを投げます – DoogQc