LwIP Verbindungstrennung

Gast #1080797
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
Persönliche Seite
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.