Ich arbeite an einer UDP-Multicast-Bibliothek und habe eine Frage zum richtigen Umgang mit Verbindungsfehlern, nicht angeschlossenen/eingesteckten NIC-Kabeln usw.
In meinem Test habe ich die folgenden Einstellungen vorgenommen:
- 2 Server sA und sB
- sA sendet UDP-Multicast-Daten und sB empfängt Multicast-Daten
- Server sind über einen Layer-2-Gigabit-Switch von Cisco verbunden
Wenn ich beispielsweise der Multicast-Gruppe auf sB beitrete, beginne ich, auf diesem Socket Daten aus den Multicast-Paketen von sA zu empfangen.
Wenn ich nun die Netzwerkkarte, an die der Multicast-Empfänger sB gebunden ist, deaktiviere/abstecke, kann ich nicht Ich erhalte keine Fehler auf Socket-Ebene (z. B. in Socket.ReceiveAsync), was wohl zu erwarten ist, da UDP verbindungslos ist, aber ich hatte gehofft, dass ich eine Art von Benachrichtigung/Ausnahme erhalten würde, wenn die IP, an die der Multicast-Empfänger gebunden ist, nicht mehr verfügbar ist.
Wie auch immer, wenn ich die Netzwerkkarte wieder aktiviere, empfange ich keine Daten mehr, obwohl der Absender immer noch an dieselbe Multicast-Gruppe sendet. Ich hatte gehofft, dass der Kernel den Wiedereintritt in die Multicast-Gruppe nach einem Hardware-Link-Ausfall tatsächlich handhaben würde, aber so wie es aussieht, tut er das nicht. Da ich aber auch keine Fehler auf Socket-Ebene erhalte, weiß ich nicht wirklich, wie ich einen Verbindungsausfall bei einem Multicast-Empfänger erkennen kann. Gibt es bestimmte Socket-Optionen, die gesetzt werden müssen, damit der Kernel einer Multicast-Gruppe wieder beitreten kann? Die einzige Option, die mir bisher eingefallen ist, ist, auf System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged-Ereignisse zu warten und zu versuchen, eine neue Verbindung herzustellen, wenn ich eine Benachrichtigung erhalte, dass die lokale IP, an die ich mich binden muss, wieder verfügbar ist. Wie gehen andere Multicast-Anwendungen mit diesem Szenario um?
Danke,
Tom