我有一台运行 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/