我想通过Linux内核调试多播接收,因为我没有收到任何数据包 . 让我更具体一点:我正在构建一个灵活的用户空间传输模式网络守护进程 . 运行它的一个选择是使用UDP套接字 . 其中一个用例是传输转发到多播地址的UDP数据包 .

因此,我最终将UDP数据包发送到多播目的地,通过UDP数据包传输到同一个多播目的地 . 我知道,这就是在寻找麻烦,但我侥幸逃脱:使用SO_BINDTODEVICE,我几乎可以通过路由表作弊,并按照我的预期发送数据包 .

在接收方面,我没那么幸运 . Linux没有给我的接收套接字提供组播数据包 . 它只是不会看到它们,虽然tcpdump证明它们到达了界面 . 请注意,单播 - 使用完全相同的套接字 - 根本不是问题 . 我可以发送和接收他们的内容 . 多播并非如此 .

所以我想知道Linux内核在接收数据包(它显然是这样做)之间的那个位置“认为”了什么,并将它提供给我的进程'UDP服务器套接字(它不做) . 有什么想法吗?