Zottel
Level-3
- Beiträge
- 2.299
- Reaktionspunkte
- 279
-> Hier kostenlos registrieren
Normalerweise kehrt recv() zurück, wenn die angeforderten Zeichen gelesen wurden.Den Timer hab ich in C#.NET
An der Lib selbst habe ich nichts geändert. Möchte ich ja auch nicht. Es soll auch keine Kritik sein. Meine Frage war nur ob ich in so einem Fall nicht etwas von dem Read bzw. Write zurückerhalten sollte.
Wenn das Kabel am PC gezogen wird, ist der TCP/IP Stack wohl "schlau" genug, um die Verbindung zu beenden, das socket zu schließen und anhängige recv()-Aufrufe zu beenden.
Libnodave realisiert das timeout wie gesagt mit select(), indem es vorher schaut, ob Zeichen da sind oder innerhalb der Timeout-Zeit verfügbar werden.
Bleibt zu fragen, was denn passiert, wenn zwar Zeichen da sind, aber nicht so viele wie recv() lesen will.
Das sollte m.E. nicht passieren können, da der TCP Stack auf jeden Fall nur vollständige Ethernet-Pakete zurückliefert (wenn du das Kabel mitten im Paket ziehst, wird das Paket komplett verworfen).
Eine andere Frage ist, ob ein ISO-Paket auf mehrere TCP-Pakete aufgeteilt werden könnte...?