[英]UDP multicast with multiple interfaces not working
我有2個網絡接口
enp5s0 Link encap:Ethernet HWaddr d8:cb:8a:c3:4d:61
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::dacb:8aff:fec3:4d61/64 Scope:Link
inet6 addr: 2607:fa48:6d42:4230::1003/128 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
ens6 Link encap:Ethernet HWaddr a0:36:9f:57:0b:ac
inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a236:9fff:fe57:bac/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
偵聽來自224.1.1.1:5007
UDP多播數據包,但只有我的程序在enp5s0
上運行才會收到數據包,這恰好是默認接口。
我正在使用以下代碼根據我在此處閱讀的內容選擇基於IP的接口。 但它似乎沒有用。
struct ip_mreq mc_addr = {};
mc_addr.imr_multiaddr.s_addr = inet_addr("224.1.1.1");
mc_addr.imr_interface.s_addr = inet_addr(argv[1]);
int rv = setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &mc_addr.imr_interface, sizeof(mc_addr.imr_interface));
if(rv < 0) {
perror("IP_MULTICAST_IF");
}
rv = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mc_addr, sizeof(mc_addr));
if(rv < 0) {
perror("IP_ADD_MEMBERSHIP");
}
如果我使用enp5s0
一切正常,但在使用ens6
時,即使我可以在我的交換機和wireshark上看到活動,我也什么也ens6
。 更令人困惑的是,如果我開始我的程序兩次,每個程序運行一個接口,每個程序都接收數據包。
那么為什么我的程序在僅使用ens6
時不接收數據包?
在多宿主主機中,您通常需要通過所有可用接口加入,除非您知道多播只能通過其中一個到達。 否則,IGMP加入消息不會轉到所有可能的路由器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.