Julian Baumann: C++: TCP Server, Riesenproblem beim Empfang von Daten

Beitrag lesen

read gibt bei Erfolg die Anzahl der gelesenen Zeichen zurück. Ein Wert von 0 wird bei EOF geliefert. Die Schleife wird bei EOF oder Fehler verlassen. Der Fehlerzweig wird aber gemäß Deiner Angaben unten nicht durchlaufen.

Nein, der Fehlerzweig wird nicht durchlaufen.
Aber deswegen ist das Verhalten des Servers trotzdem nicht normal.

Die Frage ist, ob der Client an dieser Stelle schon den Socket geschlossen hat. Erst dann wird beim Server EOF signalisiert und die Schleife verlassen.

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

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. Wenn der Client beendet wird schliesst er auch sein Socket  und kann somit keine Antwort mehr empfangen. 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..

Ich bin echt verwirrt. Ich habe schon einige TCP-Anwendungen geschrieben aber sowas ist mir noch nie passiert. Kann mir das auch absolut nicht erklären.

Julian Baumann