mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LwIP Verbindungstrennung


Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.