私は UDP マルチキャスト ライブラリに取り組んでおり、リンク障害、NIC ケーブルの切断/再接続などを適切に処理する方法について質問を受けました。
私のテストでは、次の設定があります。
- 2 つのサーバー sA および sB
- sA は UDP マルチキャスト データを送信しており、sB はマルチキャスト データを受信しています。
- サーバは、レイヤ 2 Cisco ギガビット スイッチを介して接続されています
例として、sB のマルチキャスト グループに参加すると、sA のマルチキャスト パケットからそのソケットでデータを受信し始めます。
ここで、マルチキャスト レシーバー sB がバインドされている NIC を無効化/プラグを抜くと、ソケット レベルのエラー (Socket.ReceiveAsync など) を受信しません。マルチキャスト受信者がバインドされている IP が使用できなくなると、何らかの通知/例外が発生します。
とにかく、その NIC を再度有効にすると、送信者がまだ同じマルチキャスト グループで送信しているにもかかわらず、それ以上データを受信しません。ハードウェア リンク障害の後に、カーネルがマルチキャスト グループへの再参加を実際に処理することを期待していましたが、そうではないようです。ただし、ソケット レベルのエラーも発生していないため、マルチキャスト レシーバーのリンク障害を検出する方法がよくわかりません。カーネルがマルチキャスト グループに再参加するために設定する必要がある特定のソケット オプションはありますか? これまでに思いついた唯一のオプションは、System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged イベントをリッスンし、バインドする必要があるローカル IP が再び利用可能になったという通知を受け取ったときに再バインドを試みることです。他のマルチキャスト アプリケーションはそのシナリオをどのように処理していますか?
ありがとう、
トム