我有一个套接字,我希望在连接时设置超时时间,以便在无法连接时取消整个操作,但我也希望使用套接字的makefile功能,而这需要无超时限制。
是否有简单的方法来实现这一点,还是说这将是一个困难的事情?
Python是否允许在连接后重置超时时间,以便我可以同时使用makefile并仍然具有套接字连接的超时限制?
在尝试连接之前,您只需要使用套接字的 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)
如果您使用的是Python2.6或更高版本,则可以方便地使用socket.create_connection
sock = socket.create_connection(address, timeout=10)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
设置Socket超时时间,需要按照以下步骤进行:
import socket
socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socks.settimeout(10.0) # settimeout is the attr of socks.
socks.settimeout(10.0)
否则你会遇到一个属性错误。 - Aiyion.Primesockets.setdefaulttimeout(10.0)
,我认为它被所有新创建的套接字库对象使用,以设置超时。 - DevPlayerTry this code:
try:
import socket
socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.settimeout(10)
except socket.error:
print("Nope !!!")