Debian 4 を実行している約 40 ノードのクラスターで作業しています。各ノードは、マルチキャスト IP に座ってリッスンするデーモンを実行します。
クラスターと同じスイッチ上のクライアント コンピューターを使用して、LAN 経由でマルチキャストを送信するクライアント ソフトウェアを作成し、クラスター内の各ノードがパケットを受信して応答するようにしました。
LAN と WAN の両方のインターフェイスを備えたコンピューターでクライアント ソフトウェアを実行する場合を除いて、うまく機能します。WAN インターフェイスがある場合、マルチキャストは機能しません。したがって、明らかに、マルチキャストは LAN (eth1) ではなく、WAN インターフェース (eth0) を介して誤って送信されていると考えられます。したがって、SO_BINDTODEVICE ソケット オプションを使用して、マルチキャスト ソケットが eth1 を使用するように強制しました。すべて問題ありません。
しかし、カーネルのルーティング テーブルは、LAN (eth1) が明らかにマルチキャストの低コストの宛先であることを判断する必要があると考えました。ソケットが eth1 を使用するよう明示的に強制しなければならない理由はありますか? また、特定のインターフェイスが LAN か WAN かをアプリケーションに自動的に判断させる方法 (おそらく ioctl 呼び出し) はありますか?