web-dev-qa-db-ja.com

Pythonソケット接続タイムアウト

接続時にタイムアウトしたいソケットがあるので、まだ接続できない場合は操作全体をキャンセルできます。また、タイムアウトを必要としないソケットにメイクファイルを使用することもできます。

これを行う簡単な方法はありますか、またはこれは難しいことですか?

python接続後のタイムアウトのリセットを許可するので、makefileを使用でき、ソケット接続のタイムアウトを保持できます

49
anonymous

settimeout()を試みる前に、ソケット connect() メソッドを使用する必要があります。接続後、settimeout(None)を使用してソケットをブロックする必要があります。モード。これはmakefileに必要です。私が使用しているコードは次のとおりです。

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect(address)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
89
João Pinto

Python2.6以降を使用している場合は、 socket.create_connection

sock = socket.create_connection(address, timeout=10)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
17
John La Rooy