Diese Frage ist nicht auf Python beschränkt. Es ist eine allgemeine Socket-Frage. Ich habe einen nicht blockierenden Socket und möchte eine Verbindung zu einem Rechner herstellen, der erreichbar ist - auf der anderen Seite existiert der Port nicht. Warum funktioniert select (...) überhaupt? Ich habe eine Auszeit erwartet. sock.send (...) scheitert mit einem kaputten Rohr. Wie kann ich nach Auswahl von (...) feststellen, ob der Socket wirklich verbunden ist? Vielen Dank im Voraus.Nicht blockierende Verbindung
import socket, errno, os, time, select
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
err = sock.connect_ex(('192.168.178.21', 12345))
ready_to_read, ready_to_write, in_error = select.select([], [sock], [], timeout=5)
#ready_to_write is set even 192.168.178.21:12345 does not exist.
sock.setblocking(1)
sock.send('foo') #this fails
sock.close()
sock.getsockopt (socket.SOL_SOCKET, socket.SO_ERROR) hat den Trick für mich getan. – HelloWorld
ok. Denken Sie daran, dass der Socket zwischen dem Zurücksetzen von 'getsockopt()' und Ihrem Versuch, den Socket zu lesen oder zu schreiben, heruntergefahren werden könnte. Sie sollten also versuchen, Fehler bei send/recv korrekt zu behandeln. – mpontillo