これは Java ですが、必要に応じて JNI 経由でいつでも C に戻すことができます。
2 つの NIC を備えたシステムがあり、それぞれが別個のサブネットに接続されています。マルチキャスト (特に SDP) を使用して、両方のネットワーク上の他のホストを検出したいと考えています。
1 つのネットワークは簡単です。指定されたポートで MulticastSocket を作成し、それを joinGroup にすると、パケットが取得されます。シンプルさ。
2 つのネットワーク: これまでのところ不可能です。私はもう試した:
1) 2 つのソケットを作成し、同じポートにバインドし、setInterface() または setNetworkInterface() を使用して正しいインターフェースに「接続」します。setReuseAddress() のさまざまな順列の後でも、うまくいきません。
2) 1 つのソケットを作成し、joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) を 2 回呼び出して、2 回参加を試みます。2 番目の参加呼び出しは失敗します。
Java以外のソリューションは素晴らしいでしょう。特に、2 つのインターフェイスを効果的に「結合」するマルチキャスト ルートを設定できれば (その後、各パケットを調べてどのネットワークかを判断できます)、それで問題ありません。前に述べたように、この環境 (Apache "luni" Java インフラストラクチャを備えた Linux) では、任意の量のネイティブ コードを使用できます。
ありがとう!