5
此问题不限于Python。它是一个普通的socket问题。我有一个非阻塞套接字,并希望连接到可以访问的计算机 - 另一方面,该端口不存在。为什么select(...)无论如何都会成功?我期待暂停。 sock.send(...)失败,并发生故障。如何确定在选择(...)之后套接字是否真正连接? 在此先感谢。非阻塞连接
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