Ich habe drei Anwendungen, die über Sockets miteinander kommunizieren. Sie können alle auf ihren eigenen Maschinen leben, aber sie können sich auch eine Maschine teilen. Im Moment habe ich zwei von ihnen auf der gleichen und die dritte auf einer eigenen Maschine. Ich versuche, meine Kommunikation kugelsicher zu machen, also ziehe ich Kabel heraus und töte die Anwendungen, um sicherzustellen, dass alles wie gewünscht funktioniert.Was passiert mit Sockets, wenn ich ein Netzwerkkabel abziehe?
Hier ist eine schnelle Skizze der Sache:
alt text http://i40.tinypic.com/9vch86.png
Nun, wenn ich das Netzwerkkabel an PC2 (die rote Verbindung „Con B“), die interne Verbindung hört auf zu reden (die blaue Verbindung trennen "Con A"). Ich sende Sachen von "App 1" an den Sockel, der nie zu "App 2" gelangt.
Ich habe einen Mechanismus gemacht, der dies entdeckt und trennt und dann wieder verbindet und danach kann ich das Kabel alles abziehen, was ich will und "Con A" funktioniert einfach weiter. Es ist nur das erste Mal.
Ich habe bestätigt, Kommunikation über "Con A" vor dem Trennen von "Con B".
Ich verbinde und verbinde mich auf die gleiche Weise, es ist der gleiche Code, also gibt es keinen Unterschied.
Was passiert?
Zusätzliche Informationen durch Antworten ausgelöst: PC 1 und PC 2 teilen Adressen bis zum letzten Byte.
Ich habe einen internen Keep-Alive-Mechanismus, ich sende eine Nachricht und erwarte alle 10 Sekunden eine Antwort.
Wenn ich App 3 beende, passiert das nicht, nur wenn ich das Kabel abziehe.
Leider werden Sie dadurch nicht davor bewahrt, jemals benachrichtigt zu werden, wenn Sie nur auf Daten warten. Ohne Keepalive gibt es möglicherweise keine OOB-Benachrichtigung über Dead-Peer - der Socket-Status kann nicht dazu verwendet werden, eine Fehlerbedingung zu erkennen, ohne vorher etwas() gesendet zu haben. Deshalb sind Keepalives so wichtig. – Einstein