Frank Opper: C++: TCP Server, Riesenproblem beim Empfang von Daten

Beitrag lesen

Hallo Julian,

Nein, der Fehlerzweig wird nicht durchlaufen.

Sagte ich doch.

Der Server verhält sich genauso wenn ich den Client von der selben Seite verwende und ein wenig umschreibe ähnlich wie den Server.

Das verstehe ich jetzt nicht.

Warum sollte vorher was auf dem Bildschirm stehen? Erst jetzt hat der Sever ein EOF auf dem Socket erhalten und kann mit der Verarbeitung fortfahren.

Aber dieses Verhalten ist nicht erwünscht.

Wie sollte es denn sein?

Wenn der Client beendet wird schliesst er auch sein Socket  und kann somit keine Antwort mehr empfangen.

In dem Code, den Du gezeigt hast, wird aber auch keine Antwort gesendet.

Das EOF vom Client wird meines Erachtens von meinem Server wenn er es denn bekommt nicht beachtet. Weil sonst würde er ja laut manpage die while-Schleife abbrechen und alles wäre i. O..

Die Schleife wird aber gerade wegen EOF verlassen. read() gibt einen Wert größer 0 zurück, wenn Zeichen gelesen wurden, 0 bei EOF und kleiner im Fehlerfall. Die Schleife wird bei <= 0 verlassen, also bei Fehler oder EOF. Der Fehlerzweig wird nicht durchlaufen; also ist EOF aufgetreten.

Viele Grüße
Frank