Python socket连接超时
我有一个套接字(socket),我希望在连接的时候设置一个超时时间,这样如果连接不成功,我就可以取消整个操作。不过,我还想使用这个套接字的makefile功能,而这个功能又不需要超时设置。
有没有简单的方法可以做到这一点,还是说这会很难实现呢?
Python是否允许在连接成功后重置超时时间,这样我就可以使用makefile,同时又能对套接字连接设置超时?
4 个回答
4
要设置Socket的超时时间,你需要按照以下步骤进行:
import socket
socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socks.settimeout(10.0) # settimeout is the attr of socks.
28
如果你使用的是Python2.6或更新的版本,使用socket.create_connection
会很方便。
sock = socket.create_connection(address, timeout=10)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
146
你只需要在尝试连接之前,使用套接字的 settimeout()
方法。请注意,连接成功后,你必须使用 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)