socket.recv() und tcp shutdown

19/09/2015 - 12:32 von Ulli Horlacher | Report spam
Ich moechte Daten (Text Zeilen) via tcp von einem Server lesen.
Leider erkennt socket.recv() nicht, dass der Server die Verbindung beendet
hat und wartet so ewig.

Mein Code:

try:
sock = socket.create_connection((server,port))
except socket.error as e:
die("cannot connect to %s:%d - %s" % (server,port,e.strerror))

while True:
line = ''
while True:
try:
c = sock.recv(1)
except socket.error as e:
die("cannot read from %s:%d - %s" % (server,port,e.strerror))
if c == None: break
if c == "": break
line += c
print(line)


Ich haette erwartet, dass es am Ende zu der Fehlermeldung "cannot read"
kommt oder dass c==None eintritt, aber sock.recv() blockiert und erkennt
den tcp shutdown nicht.

(Wie) kann man socket.recv() dazu bringen hier eine exception auszuloesen
oder None zurueckzuliefern?
Oder gibts ein anderes Modul, dass das besser/einfacher handhabt als socket?

Ullrich Horlacher Server und Virtualisierung
Rechenzentrum IZUS/TIK E-Mail: horlacher@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
 

Lesen sie die antworten

#1 Florian Weimer
19/09/2015 - 12:36 | Warnen spam
* Ulli Horlacher:

(Wie) kann man socket.recv() dazu bringen hier eine exception auszuloesen
oder None zurueckzuliefern?



Gar nicht. Wenn das blockiert, heißt es, daß die TCP-Verbindung nicht
sauber heruntergefahren wird. Du mußt also einen Timeout einbauen.

Ähnliche fragen