Forum: Mikrocontroller und Digitale Elektronik LwIP Verbindungstrennung


von Tabaluga (Gast)


Lesenswert?

Hallo!

Ich beschäftige mich schon so einige Zeit mit LwIP und komme an einer 
Stelle nicht weiter.
Wenn ich mit tcp_close() eine Verbindung schließe, wird das FIN-Flag an 
den PC gesendet, der dieses mit einem ACK bestätigt.
So wie ich das verstanden habe, ist nach TCP Spezifikation die 
Verbindung noch beliebig lange in Richtung µC offen, da der PC noch kein 
FIN gesendet hat.
LwIP deallokiert aber nach 20 Sekunden Timeout den Socket und springt 
dann in die mit tcp_err() festgelegte Fehler-Callback Routine. (Ich 
benutze LwIP als RAW-API).

Soll das so laut TCP-Protokoll???
Oder mache ich etwas falsch?

Besten Dank,
Tabi

von Roland R. (roland) Benutzerseite


Lesenswert?

Hallo,

Schau Dir mal in RFC793 [1] das Zustandsdiagramm auf Seite 23 an. Im 
Grunde kann die Verbindung endlos in solch einem halb geschlossenen 
Zustand sein. Allerdings wird das Gegenüber in so einem Fall ebenfalls 
ein FIN senden sobald alle noch ausstehenden Daten verschickt (und 
quittiert) wurden.

Viele Embedded-Stacks vereinfachen die Logik und schließen den Socket 
nach einiger Zeit, egal ob der Remote Host die Verbindung ebenfalls 
geschlossen hat oder nicht. Dies hat auch Gründe in der 
Speicherverwaltung, da die Anzahl der geöffneten Stacks oft limitiert 
ist und so schneller ein freier Socket zur Verfügung steht.

Bei meinem eigenen Stack schließe ich die Verbindung ebenfalls nach 
einiger Zeit, allerdings verlängere ich den Timeout bei neu ankommenden 
Daten.

[1] http://www.ietf.org/rfc/rfc793.txt

Gruß,
Roland

von Tabaluga (Gast)


Lesenswert?

Hallo Roland

Vielen Dank für deine Antwort.
Ob LwIP den Timout verlängert, wenn weitere Daten reinkommen, kann ich 
mir im Moment nicht beantworten, aber jetzt verstehe ich das Verhalten 
besser.
Du hast mir sehr weitergeholfen, vielen Dank!

Gruß,
Tabi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.