LwIP remote close erkennen

OP #7496307
Lesenswert?

Kennt sich hier jemand mit der RAW Api von LwIP aus? Ich fange an neue Verbindungen vom PC aufzunehmen und starte im accept handler das lesen mit tcp_recv. Soweit funktioniert das auch alles aber wie kann ich einen handler dafür setzen ob der PC die Verbindung getrennt hat?

In der Dokumentation steht, dass der pbuf im receive NULL ist, wenn die Verbindung geschlossen wurde. Heißt das ich muss immer einen Lesevorgang starten um das zu erkennen oder geht das auch ohne Lesevorgang?

#7496316
Lesenswert?

Du musst Schreiben um einen Fehler zu bekommen. Lesen hilft nur wenn du weißt das der Gegner zyklisch etwas sendet und dann kann man einen Timeout setzen. Bzw. beim Receive bekommt nur einen 'graceful close' mit, also wenn der Gegner während des receive close aufruft. Auf Ereignisse vom Phy kann man sich nicht verlassen, die Strecke kann ja irgendwo nach dem x-ten Switch unterbrochen sein und das bekommt man nicht mit.

Gast #7496496
Lesenswert?

J. S. schrieb:

Auf Ereignisse vom Phy kann man sich nicht verlassen, die Strecke kann ja irgendwo nach dem x-ten Switch unterbrochen sein und das bekommt man nicht mit.

Zudem kurz Kabel ab- und wieder an stecken normalerweise (unabhängig von lwip meine ich) nicht automatisch eine Trennung des IP Sockets zur Folge hat.

#7497233
Lesenswert?

Eine einseitig geschlossene TCP Verbindung wird von der Gegenseite erst erkannt, wenn diese versucht Daten zu senden und das Acknowledge aus bleibt. Andernfalls wird sie endlos auf Datenempfang warten.

Um eine geschlossene Verbindung zu erkennen, kann Keepalive verwendet werden, wenn die TCP/IP Implementierung dies unterstützt, oder es muss auf Anwendungsebene regelmäßig Daten gesendet werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren