0

以前にインターフェイスに追加されたエイリアス IP からマルチキャスト グループにデータを送信しようとしています。IP_MULTICAST_IF とエイリアス IP を使用して setsockopt() を呼び出しています。ただし、データは常にそのインターフェイスのデフォルト IP から送信されます。説明のために、いくつかのコードを提供しています。

ip addr showコマンドは、ens33インターフェースに対して次の出力を提供します。

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4c:78:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.190.183/24 brd 192.168.190.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.190.50/24 scope global secondary ens33
       valid_lft forever preferred_lft forever

現在、setsockopt() は次のように使用されています。

struct in_addr localInterface;
localInterface.s_addr = inet_addr("192.168.190.50");

    if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0)
    {
        perror("Setting local interface error");
        exit(1);
    }
    else
    {
        printf("Setting the local interface...OK\n");
    }

ただし、マルチキャスト パケットは常に から送信さ192.168.190.183れ、setsockopt() 中にエラーはスローされません。

誰でもこれを解決できますか?助けてください。前もって感謝します。

4

1 に答える 1

1

IP_MULTICAST_IF は受信に関するものです。これは、参加メッセージと脱退メッセージが送信される NIC に関するものであり、マルチキャストを誰から受信するかを決定します。

特定の NIC または IP アドレス経由で送信する場合は、次を使用します。bind().

于 2014-09-03T11:38:23.377 に答える