2010-08-07 149 views
31

我有一个套接字,我想连接时超时,以便我可以取消整个操作,如果它无法连接,但它也想使用生成文件的套接字,不需要超时。Python套接字连接超时

有没有一个简单的方法来做到这一点,或者这将是一件困难的事情吗?

是否蟒蛇允许超时复位后连接,这样我可以使用的makefile,仍然有套接字连接超时

回答

56

你只需要在尝试connect()之前使用socket settimeout()方法,请注意连接后必须settimeout(None)将套接字设置为阻塞模式,这对于生成文件是必需的。 这里是我使用的代码:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(10) 
sock.connect(address) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+5

有关信息,超时必须以秒为单位。 – 2016-03-29 14:27:12

8

如果使用python2.6的更新,它的方便使用socket.create_connection

sock = socket.create_connection(address, timeout=10) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+0

对unix socket没什么帮助 – Pierrot 2018-03-09 00:17:55