Python socket连接超时

83 投票
4 回答
248936 浏览
提问于 2025-04-16 02:28

我有一个套接字(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)

撰写回答