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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.