gpt4 book ai didi

sockets - 如何在多宿主服务器的非默认接口(interface)上接收多播数据

转载 作者:行者123 更新时间:2023-12-04 07:44:19 25 4
gpt4 key购买 nike

我有一个带有两个 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));

根据 ip maddr它在正确的接口(interface)上连接到该组,并且 tshark -i eth1表明我实际上正在收到多播数据包。

但是,调用 recvfrom(sock) 时我没有收到任何数据包.如果我将“ip route default”设置为 eth1(而不是 eth0),我会通过 recvfrom 获取数据包。这是我的代码还是网络设置的问题,正确的做法是什么?

(更新) 解决方案: caf 暗示 this可能是同样的问题;确实:在做 echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter 之后我现在可以接收多播数据包了!

最佳答案

caf的评论说这是 receiving multicast on a server with multiple interfaces (linux) 的副本回答了这个! (为了清楚起见,我将其发布为答案。)即 echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter解决了我的问题。

关于sockets - 如何在多宿主服务器的非默认接口(interface)上接收多播数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com