wake-up-neo.com

Python-Socket-Verbindungszeitlimit

Ich habe einen Sockel, den ich beim Verbinden zeitlich abbrechen möchte, damit ich den gesamten Vorgang abbrechen kann, wenn er noch keine Verbindung herstellen kann. Außerdem möchte er das Makefile für den Sockel verwenden, für den kein Timeout erforderlich ist. 

Gibt es eine einfache Möglichkeit, dies zu tun, oder wird dies schwierig werden?

Erlaubt Python das Zurücksetzen des Timeouts nach dem Verbinden, so dass ich Makefile verwenden kann und immer noch ein Timeout für die Socket-Verbindung hat

43
anonymous

Sie müssen nur die socket settimeout() -Methode verwenden, bevor Sie connect() versuchen. Beachten Sie, dass Sie nach dem Verbinden settimeout(None) müssen, um den Socket in den Sperrmodus zu setzen, wie dies für das Makefile erforderlich ist. Hier ist der Code, den ich bin mit:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect(address)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
78
João Pinto

Wenn Sie Python 2.6 oder neuer verwenden, ist es sinnvoll, socket.create_connection zu verwenden.

sock = socket.create_connection(address, timeout=10)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
13
John La Rooy

Um das Socket-Timeout festzulegen, müssen Sie folgende Schritte ausführen:

import socket
socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.settimeout(10.0)
0