开发者社区> 问答> 正文

两次接收每个多播数据包

我正在侦听来自外部源的多播数据。

当我的应用程序不 运行时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没有两次收到每个数据包的情况下运行?

展开
收起
祖安文状元 2020-01-16 17:44:35 932 0
1 条回答
写回答
取消 提交回答
  • 数据包在应用程序中两次被看到的最可能的原因是,它两次到达主机,或者两次到达同一接口,或者两次到达不同接口。尝试运行数据包捕获(tcpdump或onload_tcpdump)以确认是否是这种情况。

    此行为与内核中到达“错误”接口的数据包被丢弃的内核不同。Onload通常会在所有加速的接口上安装一个筛选器,以捕获流量,而不仅仅是应用程序指定的流量。

    2020-01-16 17:44:39
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载