【发布时间】:2013-08-05 09:51:12
【问题描述】:
我正在尝试使用多播将多个 UDP 数据报发送到嵌入式 linux 单元。设备上的内核版本为:
/ # uname -r
2.6.24.6
出于测试目的,我使用找到的代码here(添加了几个标题并更改了 IP 地址以匹配单元的 IP 地址)
问题是同一组播组中的其他设备(Windows PC)能够接收数据,而该单元不能。我在某处读到必须修改 rp_filter 的值。我尝试了所有选项,但无济于事。
我可以毫无问题地将设备作为服务器运行。但它根本没有收到。
请注意,netstat -g 不起作用。
/ # netstat -g
netstat: invalid option -- g
BusyBox v1.11.2 () multi-call binary
Usage: netstat [-laentuwxr]
Display networking information
Options:
-l Display listening server sockets
-a Display all sockets (default: connected)
-e Display other/more information
-n Don't resolve names
-t Tcp sockets
-u Udp sockets
-w Raw sockets
-x Unix sockets
-r Display routing table
因此我无法检查组成员身份。
P.S:我在一台 linux PC 上运行了相同的程序(代码来自上面的链接),它运行正常。所以代码不是问题。
【问题讨论】:
-
我设法检查了 /proc/net/igmp,它说 eth0 是 E2010101 -> 226.1.1.1 的成员,这是正确的。但是我仍然没有收到任何数据报
-
您不需要 netstat -g 支持来查询组成员资格。如果你在一个盒子上 strace netstat -gn 你会看到 netstat 只是从 /proc 中读取这个信息。因此阅读 /proc/net/igmp (和 /proc/net/igmp6 用于 ipv6)将显示您当前的组成员身份。 (注意我的(x86)框组是 010000E0 代表 224.0.0.1,这意味着您可能需要切换一些字节顺序)。
-
@amo-ej1:是的,我想通了。检查我之前的评论。但是还是收不到任何数据报。
-
4321 端口也打开了。刚刚签入 /proc/net/udp
-
过去 2 天一直在努力让它工作。根据我到目前为止检查的所有内容(端口、组成员资格...),它应该可以工作...