Hallo john,
Die 2. Version funktioniert (sehr bedingt). Wenn der Client die Verbindung trennt nachdem er seine Nachricht übermittelt macht der Server weiter und gibt
result
aus.
Meine Erklärung ist das recv blockt. Sie holt solange die Zeichen ab bis keine mehr kommen und wartet nun das welche kommen (blocking). Es kommen aber keine. An dieser Stelle sollte die while-Schleife abbrechen da die Nachricht ja zu Ende ist.
Moment, macht der Server jetzt in der Schleife weiter oder nicht? Was meines Wissens passieren sollte, ist, dass der Prozess ein Signal kriegt, dass er auf der Datei nicht mehr lesen kann. Das wird dann asynchron, sprich nicht direkt im "Fluss" bearbeitet. Das könnte beispielsweise eine Globale Variable, die im while getestet wird, umstellen. Oder den Prozess töten (weil paralleler Server). Oder so ähnlich.
Was aber eher passieren sollte ist, dass recv einen return value < 0 hat und die Schleife einfach beendet wird.
Grüße,
Sven