質問: Windows上でブロードキャストを使ったアプリを作っていて以前は期待通りに動いていたのが、最近動かなくなっているのに気づいて調べ始めました。アプリから255.255.255.255に対して送信したブロードキャストパケットが相手に届いていなかったです(WireSharkでも送信されていないことを確認)。 上のテーブルのインターフェース=192.168.56.1はVirtualBoxのHost-Only Ethernet Adapterであり、192.168.0.4側は有線LANのインターフェースでした。今回のアプリではブロードキャストパケットを有線LAN(192.168.0.4)側のインターフェースに送信して欲しかったのですが、どうもVirtualBox側のI/Fにしか送信されていなかったようなのです。 試しに、VirtualBox側のインターフェースを止めるか、順序を入れ替えて有線LAN側が先になるようにしてみると、ブロードキャストパケットは有線LAN側に送信されました。アプリも期待通りに動き始めました。 質問をまとめると、 * ブロードキャスト用のルーティングテーブル内に同じメトリック値を持つインターフェースが2つ以上あるとき、最初のインターフェースのみに送信されるのは正しい動作なのか? ということです。 ブロードキャストの場合はすべてのインターフェースに送信されるものと思っていたのですが、これは間違いでしょうか。 詳しい方、コメントをよろしくお願いします。
回答: 「パケットを受信した時点でどのI/Fから来たのかを知る」のではなく、「予めソケットを特定のI/Fにbindしておき、そのソケットで受信する」というのが正解のようですね。