web-dev-qa-db-ja.com

Python-ソケットがまだ接続されているかどうかを確認する方法

私は次のコードを持っていますが、これは自明です:

_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(Host, port)
s.send("some data")
# don't close socket just yet... 
# do some other stuff with the data (normal string operations)
if s.stillconnected() is true:
    s.send("some more data")
if s.stillconnected() is false:
    # recreate the socket and reconnect
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(Host, port)
    s.send("some more data")
s.close()
_

s.stillconnected()を実装するにはどうすればよいですか。ソケットを盲目的に再作成したくありません。

4
AK_

サーバー接続が機能しなくなった場合、sendメソッドを呼び出すと例外がスローされるため、try-exceptionブロックを使用してデータの送信を試行し、例外がスローされた場合はキャッチして、接続を再確立できます。

try:
    s.send("some more data")
except:
    # recreate the socket and reconnect
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(Host, port)
    s.send("some more data")

[〜#〜] edit [〜#〜]:@ Jean-Paul Calderoneのコメントによると、すべてを送信する高レベルのメソッドであるsendallメソッドの使用を検討してください。すべてのデータの送信を保証しない低レベルのメソッドであるsendの代わりに、データまたはエラーをスローしますOR HTTPライブラリのような高レベルのモジュールを使用しますソケットのライフサイクルを処理できます。

4
Robert Valencia