Linux Socket - überprüfen ob Verbindung noch vorhanden.

Jennesta

Erfahrenes Mitglied
Hi,
ich arbeite gerade an einem Serverprogramm, welches einige große Berechnungen macht. Dies klappt soweit auch vernünftig. Problem ist, dass manche Clients vor meinem send() disconnecten. Sei es timeout oder andere Bedingungen.
Gibt es irgendeine Möglichkeit zu überprüfen, ob die Verbindung noch besteht? Ich vermute nämlich, dass sich mein Programm beim versuch zu senden aufhängt.
Ich habe irgendwo aufgeschnappt, dass man mit read auf eof prüfen können. Aber blockiert die Funktion nicht, falls doch eine Verbindung besteht und nichts mehr gesendet wird?

Gruß,
Jennesta
 
Warum machst du nicht eifnach einen test-send()? Bei einem Fehler gibt der dir ja -1 zurück, dann weißt du, dass die verbindung nichtmehr besteht.
 
Das ist ja das was ich meine. Normalerweise lasse ich mir die Bytes vom send() ausgeben und überprüfe somit, ob die ganze Nachricht gesendet wurde, sowie lösche am Ende noch die empfangene Datei vom Client. Diese Ausgabe wird nur leider nie erreicht, auch mit -1 nicht. Daher die Vermutung, das sich das send() aufhängt. Der Server läuft zwar wie erwartet weiter, weil nur der mit fork() erzeugte Prozess hängt, aber ich bin mir nicht sicher, ob das bei langer Laufzeit zu vielen toten Prozessen führt. Daher würde ich den send() Befehl möglichst umgehen falls nötig.
 
Sowohl send() als auch recv() brechen bei Fehler den Vorgang ab.
Wenn also ein Ende die Verbindung abbricht und du am anderen Ende ein send() machst, bricht er das ab und gibt dir -1 zurück.
Dasselbe, wenn die Verbindung mitten im send() abbricht.
Du musst also vorm Senden nicht prüfen, ob die Verbindung noch besteht, du musst nur bei Rückgabe von -1 die Verbindung neu aufbauen, oder den Prozess beenden.

Ich vermute eher, dass dein recv() einen Bug hat, zu kleiner Buffer, oder du überschreibst den Buffer ohne dessen alten Inhalt vorher woanders hin zu kopieren, oder fehlende Errorprüfung.
 
Zurück