2010-08-07 12 views
31

Ich habe einen Socket, den ich bei der Verbindung Timeout möchten, so dass ich den gesamten Vorgang abbrechen kann, wenn es noch nicht verbinden kann, auch das Makefile für den Socket verwenden möchte, die keine Zeitüberschreitung erfordert.Python-Socket-Verbindung Timeout

Gibt es einen einfachen Weg dies zu tun, oder wird es schwierig werden?

Hat Python ein Reset des Timeout nach verbunden ermöglichen, so dass ich Make-Datei verwenden können, und haben immer noch ein Timeout für die Socket-Verbindung

Antwort

56

Sie müssen nur die Buchse settimeout() Methode verwenden, bevor die connect() versuchen, bitte beachten Sie, dass Nach dem Verbinden müssen Sie settimeout(None) setzen, um den Socket in den Blockiermodus zu versetzen, dies ist für das Makefile erforderlich. Hier ist der Code ich verwende:

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

Informationen zu verwenden, muss das Timeout in Sekunden ausgedrückt werden. –

8

Wenn Sie python2.6 oder höher verwenden, ist es praktisch, socket.create_connection

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

hilft nicht viel für Unix-Socket – Pierrot