この質問はPythonに限定されません。その一般的なソケットの質問。私は非ブロッキングソケットを持っていて、到達可能なマシンに接続したい - 反対側のポートは存在しません。とにかく選択(...)が成功するのはなぜですか?私はタイムアウトが予想された。 sock.send(...)が壊れたパイプで失敗します。 select(...)の後にソケットが実際に接続されているかどうかを調べるにはどうすればよいですか? ありがとうございます。ノンブロッキング接続
import socket, errno, os, time, select
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
err = sock.connect_ex(('192.168.178.21', 12345))
ready_to_read, ready_to_write, in_error = select.select([], [sock], [], timeout=5)
#ready_to_write is set even 192.168.178.21:12345 does not exist.
sock.setblocking(1)
sock.send('foo') #this fails
sock.close()
sock.getsockopt(socket.SOL_SOCKET、socket.SO_ERROR)は私のためのトリックでした。 – HelloWorld
'getsockopt()'が返されてからソケットを読み書きしようとする間に、ソケットがシャットダウンする可能性があることに注意してください。 send/recvのエラーをうまく処理しようとする必要があります。 – mpontillo