【问题标题】:How to send multicast data from a particular IP?如何从特定 IP 发送多播数据?
【发布时间】:2014-10-27 18:40:01
【问题描述】:

我正在尝试从先前添加到接口的别名 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() 期间不会抛出任何错误。

谁能解决这个问题?请帮忙。提前致谢。

【问题讨论】:

    标签: sockets networking multicast setsockopt


    【解决方案1】:

    IP_MULTICAST_IF 是关于接收。它是关于发送加入和离开消息的 NIC,这反过来又决定了你将从谁接收多播

    如果您想通过特定的 NIC 或 IP 地址发送,请使用 bind().

    【讨论】:

    • 我的概念是错误的。现在,它工作正常。非常感谢。
    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多