hrr*_*hrr 8 sockets udp multicast multihomed
我有一个带有两个NIC(eth0和eth1)的linux服务器,并且在"ip route"中将eth0设置为默认值.现在我想在eth1上接收多播数据包.我在路由表中添加了"224.0.20.0/24 dev eth1 proto static scope link",并按如下方式连接:
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
// port 12345, adress INADDR_ANY
bind(sock, &bind_addr, sizeof(bind_addr));
// multicast address 224.0.20.100, interface address 10.13.0.7 (=eth1)
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imreq, sizeof(imreq));
Run Code Online (Sandbox Code Playgroud)
根据ip maddr
它在正确的接口上连接到该组,并tshark -i eth1
显示我实际上正在获取多播数据包.
但是,我在呼叫时没有收到任何数据包recvfrom(sock)
.如果我将"ip route default"设置为eth1(而不是eth0),我会通过recvfrom获取数据包.这是我的代码或我的网络设置的问题,这样做的正确方法是什么?
(更新)解决方案: caf暗示这可能是同样的问题; 确实:做完之后echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
我现在可以收到组播数据包了!
caf的评论说这是在具有多个接口(linux)的服务器上接收多播的重复,回答了这个问题!(为了清楚起见,我将其发布为答案。)也就是说,echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
解决了我的问题。
归档时间: |
|
查看次数: |
7614 次 |
最近记录: |