测试socket之[4]:单网卡双IPsocket 组播测试

首先看一篇文章《组播的时候到底该如何绑定网卡》,里面提到:

google了一番发现了一个问题,在linux上是不能绑定在物理网卡地址上的,这样做会什么信息都收不到,要么绑定0.0.0.0以收取所有的组播消息,或者绑定一个具体的组播地址以收取发到这个组播地址的消息。而具体要收取哪一个子网的组播信息的时候用ip_mreq.imr_interface来指定。

方法(1)发送之前要加上

                struct in_addr  sin_addrXXX;
                sin_addrXXX.s_addr = htonl(LWIP_MAKEU32(192, 168, 6, 60));

                setsockopt(socket_fd1, IPPROTO_IP, IP_MULTICAST_IF, &sin_addrXXX);

为什么这么加?主要是选网卡(俩IP ,另一个IP可以看作虚拟网卡),在进入ip——route之前先改了一下地址。

方法(2)当然还有另外一招:设置默认的ip4_default_multicast_netif。这一个大概是lwip独有的。看接口 linux大概没有。

方法(1)和(2)同时加上,那么方法(1)起作用,因为 方法(1)是在ip_route之前,方法(2)是在ip——route内部。

猜你喜欢

转载自blog.csdn.net/unsv29/article/details/107835217