c - 刷新组播组成员

标签 c linux multicast uclinux

我有几台嵌入式机器监听 rtp 音频数据并将其流式传输到多播组。它们连接到一个智能托管交换机 (Netgear GS108Ev2),该交换机在其端口上执行基本的 igmp 监听和多播过滤,这样我的 (W)LAN 的其余部分就不会被淹没。

开始时一切正常,大约持续 500-520 秒。之后,他们不会再收到任何数据,直到他们离开并再次加入群组。我猜交换机在超时后“忘记”了连接。

有什么方法可以刷新组成员,即让交换机知道还有人在监听,而不会丢失数据包?

系统信息:

Arch: blackfin

# cat /proc/version
Linux version 2.6.28.10-ADI-2009R1-uCBF54x-EMM
(gcc version 4.3.3 (ADI) ) #158 PREEMPT Tue Jun 5 20:05:42 CEST 2012

最佳答案

这就是多播/IGMP 协议(protocol)的工作方式。客户端必须通过发送成员报告 定期加入组,否则将假定他在短暂的超时后离开了组。但是,这些报告通常仅在从本地多播路由器接收到成员资格查询时才发送。您的客户要么没有收到查询,要么没有回复报告。

尝试使用像 wireshark 这样的工具来查看哪些 IGMP 数据包通过您的网络发送。

关于c - 刷新组播组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10913509/

相关文章:

c - 为什么父进程首先从 LINUX 中的管道读取

c - 如何通过 C 中的函数初始化多个未知大小的数组

c - fgetc 总是返回值 1

linux - 打印带有列号的页脚

linux - 有没有办法在 linux 脚本命令后自动返回键?

c++ - Lua C API 如何确定函数是作为类成员调用的还是只是表中的函数?

python - 如何忽略 OSError : [Errno 2] in Python, os linux、usbtmc

c# - 从多播数据包中获取发送者 ip

c - 从 eth0 向 eth1 发送多播

c++ - 如何在一个程序中实现client-server udp multicast?