c - 接收每个多播数据包两次 Onload?
问题描述
我正在收听来自外部来源的多播数据。
当我的应用程序没有运行时 Onload
,一切都很好。但是,当我在下面运行时,Onload
我会收到每个数据包两次。
这就是我加入多播组的方式:
struct ip_mreq mreq;
bzero(&mreq,sizeof(mreq));
mreq.imr_multiaddr.s_addr = inet_addr("233.1.2.3");
mreq.imr_interface.s_addr = inet_addr("192.1.2.3");
if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)) < 0)
...
我怎样才能在Onload
不接收每个数据包两次的情况下运行?
解决方案
一个数据包在应用程序中出现两次的最可能原因是它两次到达主机,在同一接口或不同接口上两次。尝试运行数据包捕获 (tcpdump
或onload_tcpdump
) 以确认是否是这种情况。
这种行为不同于内核丢弃到达“错误”接口的数据包。Onload 通常会在所有加速接口上安装过滤器以捕获流量,而不仅仅是应用程序指定的流量。
推荐阅读
- c# - 当我尝试插入数据网格视图时,数据表为空
- swift - SWIFT 反映某个协议的所有实现
- python - 如何将存储在 Google Drive 上的 Google Docs 文件(文档模板)转换为 PDF 并下载?
- java - Drools 无法将列表绑定到变量
- dns - WHOIS 查询中的名称服务器是什么?
- java - JTextField 输入到 JList - 列表不出现
- php - Woocommerce 产品修复变体设置默认数量
- kubernetes - 如何重建 kubernetes 集群以更改 kubernetes 监听的接口?
- javascript - 如何消除正则表达式代码中的空格?
- django - Django 外键选择