Seite 1 von 1

Senden und Empfangen von Daten per TCP

Verfasst: So Okt 18, 2015 12:35 pm
von stickybit
Senden und Empfangen von Daten per TCP

Hallo,

Code: Alles auswählen

ssize_t read( int socketfd, void *data, size_t data_len );
Die Funktion gibt Anzahl von gelesenen Bytes zurück. Logischerweise muss sie dann 0 zurückgeben, wenn keine Daten mehr vorhanden sind.
Lt. Beschreibung wird 0 zurückgegeben wenn die Verbindung geschlossen wurde.

Wenn read in beiden Fällen 0 zurückgibt, wie kann ich dann zwischen beiden Fällen unterscheiden?

LG
Andre

Re: Senden und Empfangen von Daten per TCP

Verfasst: So Okt 18, 2015 1:46 pm
von nufan
Ich würde dir raten ein Protokoll um deine Daten zu bauen. Also zuerst sagst du wie viele Daten du insgesamt schickst, danach erst deine Daten selbst. Dann weißt du genau wann die Gegenseite fertig ist mit schicken und du aufhören kannst auf Daten zu warten. Fehlerbehandlung ist ja sowieso über einen negativen Rückgabewert möglich.
Es gibt noch ein paar andere Möglichkeiten einen geschlossenen Socket festzustellen, z.B. indem du einfach versuchst Daten über ihn zu verschicken und dann den Fehlercode interpretierst. Das empfinde ich persönlich aber eher als unzuverlässig und unschön.

Noch als Randnotiz:
read() ist blockierend. Das heißt wenn du versuchst Daten zu lesen, die Gegenseite dir jedoch nicht antwortet - den Socket aber auch nicht geschlossen hat - blockiert das dein Programm.