2010-08-07 236 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