c++ - 在具有多个接口(interface)的linux主机上接收多播

标签 c++ c linux networking multicast

我有一台运行 Ubuntu 16.04 的主机通过主要有线网络接口(interface)连接到一个网络,并通过 USB 转以太网适配器连接到另一个网络。使用 tcpdump,我能够验证两个网络接口(interface)上传入的多播数据包。但是,我的应用程序没有从辅助接口(interface)接收到任何多播数据。如果我断开连接到主接口(interface)的电缆,然后重新启动我的应用程序,那么我确实会从辅助接口(interface)接收数据。只有连接了两个接口(interface),应用程序才不会从辅助接口(interface)接收数据。

最佳答案

我发现了类似的问题(带有 USB 转以太网适配器的 Raspberry Pi Zero,无法响应 mDNS 查询)。要确定您的问题是否相同,您的应用是否在同时运行 tcpdump 的同时正确接收多播流量?使用 --no-promiscuous-mode 运行 tcpdump 是否看不到多播流量?

如果您对两者的回答都是肯定的,那么我找到的解决方法就是ip link set eth0 promisc on。我不知道这是硬件错误(我使用的是 Kontron DM9601 适配器,ID 0FE6:9700)还是驱动程序错误,但无论哪种方式,启用混杂模式似乎都为我修复了多播接收问题。或者,您可以尝试使用更好的 USB 转以太网适配器。

关于c++ - 在具有多个接口(interface)的linux主机上接收多播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48309329/

相关文章:

c++ - 将纳秒转换为秒和纳秒

c - 使用c编程的顺序文件访问

c - 在函数中初始化数组

c - C中的基本流处理

c++ - 为什么 Visual Studio 2012 - Windows XP (v110_xp) 的选项在 Visual Studios 中缺失?

c++ - 使用 Tcp,为什么大数据 block 的传输带宽比小数据 block 低?

c++ - minimax算法中的maximum-edge是什么?

javascript - 如何启用 'wget' 使用 Javascript 下载 HTML 的全部内容

php - 为什么 shell_exec 对某些命令不起作用/不输出?

c++ - 使用 libpam0g-dev 和 cmake 构建应用程序