PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TCP Problem, Verbindungsabbruch bei der Gegenstelle wird nicht erkannt


Gast
2006-07-21, 15:24:15
Hallo,

ich entwickle gerade etwas mit TCP/IP über Sockets.

Es stehen hier zwei Rechner (ich nenne sie mal A und B). Diese sind miteinander verbunden. Zwischen ihnen liegt ein Router (Spekulation: dann wird alles zu einem zentralen Server geleitet und wandert zum anderen Rechner, es ist ein großes Firmennetzwerk).

A sendet nun an B Daten. Ziehe ich bei B den Netzwerkstecker, erlischt bei B die Verbindung, der Socket (also send() oder recv()) liefert -1. So soll es auch sein. A hingegen sendet munter weiter. Ich habe den Zustand 30 Minuten so gelassen, send() gab keinen Fehler zurück.

Wie kann das sein? Muss nicht TCP verschiedene "ACKs" verlangen und mit einem Timeout abbrechen? Oder können die "ACKs" von einem Zwischenpunkt her gesendet worden sein (das müßte dann ein Zwischenpunkt im Firmennetz sein) sodass A denkt, B wäre immernoch aktiv? Oder Flutet A das Netz mit Wiederholungsanfragen für die "ACKs" von B? Fragen über Fragen...

Ich habe dann etwas rumgegoogelt und traf auf folgendes: In IPv6 gibt es ein so genanntes "Neighbor Unreachability Detection". Dazu heißt es:


Neighbor Unreachability Detection ist ein Feature von IPv6, mit dem ein Knoten feststellen kann, ob ein Nachbarknoten erreichbar ist. Als erreichbar gilt ein Nachbarknoten dann, wenn dieser bestätigt hat, dass er an ihn gesendete IPv6-Pakete erhalten hat (über unicast Neighbor-Solicitation- und Neighbor-Advertisement-Nachrichten oder über Protokolle weiter oben liegender Schichten). Mit der Neighbor Unreachability Detection kann ein IPv6-Knoten feststellen, dass ein Nachbarknoten nicht mehr erreichbar ist, und dies anderen Komponenten und Anwendungen mitteilen.

Ist das das Problem, oder liege ich da komplett falsch? Weiß jemand damit was anzufangen?

Danke schon mal im Voraus.

Trap
2006-07-21, 16:05:04
Ich würde sagen das ist OS spezifisch was dann passiert, das Protokoll selbst schreibt da nix vor.

Gast
2006-07-21, 18:08:30
versuch anstatt "send" und "recv" "write" und "read" zu nuzten ...
... mit "send" und "recv" habe ich immer probleme

Gast
2006-07-21, 18:14:34
Sicher das du mit TCP und nicht UDP arbeitest?

Gast
2006-07-21, 19:39:36
Hallo,

ich habe leider nur send() und recv() zur Verfügung. Fragt jetzt nicht nach den Hintergründen... Und es handelt um TCP, auch wenn das Problem fast wie UDP aussieht. Meine Wahl fiel auf TCP, damit ich solcherlei Probleme nicht habe, aber naja, so schnell kann es gehen :D

Schöne Grüße

Trap
2006-07-21, 20:35:49
Wozu willst du sowas denn wissen? Ich finde das Verhalten die Verbindung als weiterbestehend zu betrachten sinnvoll, grade wenn man sehr schlechte WLAN-Verbindung hat oder ähnliches möchte ich nicht wegen 30 Sekunden Verbindungsverlust gekickt werden.