私はPython 2.7.5でrawソケットインタフェース(import socket
)を使ってアプリケーションを書いています。Python:何らかの理由でソケットが切断されたときを検出しますか?
何らかのイベントを登録する方法があるかどうか、またはTCPソケット接続がまだ確立されていない場合は、定期的な間隔で簡単にテストする方法があるかどうかを知る必要があります。
私が見つけたアドバイスのほとんどは、「ただ読もうとしていますが、終了した場合はエラーまたはバイトがありません」と表示されています。しかし、時々私はそれからread
に準備ができていないが、私はまだソケットが閉じられるかどうかを知りたいので、例えば私は手動で直ちに再接続することができます。
また、ソケットからread
を送信すると、バッファから読み取られたバイトが削除されるため、単に接続性をテストするためのread
ingは実行可能ではないようです。
接続の有効性をチェックするバックグラウンドスレッドを持つことで問題は解決します。そのスレッドは接続が生存しているかどうかを1秒に1回確認することができます。それがドロップされた場合は、関数を呼び出すか、変数やその他のものを設定して、アプリケーションが接続が閉じていることを知ることができます。それがなぜ閉鎖されたか(ピア、タイムアウトなどでリセットされた)知っていると、さらに便利になります....
これに関するアドバイスはありますか?このチュートリアルのような
を使用するフローです。 Linuxで 'select()'(または 'epoll()'を使用) – tMC
関連:http://stackoverflow.com/questions/17705239/is-there-a-way-to-detect-that-tcp-socket-has (TL; DR:ソケットから最初に来るすべてのバイトを読み込もうとしない限り、接続が閉じられているかどうかを調べる良い方法はありません。 TCPソケットは、FIFOイベントの順序付けという考え方に基づいているため意図的に実装されています。つまり、到着したデータを順番に読み込み、すべてのストリームを読み込んだ後でストリームの終わりを調べるだけです) –