我正在侦听来自外部源的多播数据。
当我的应用程序不 运行时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通常会在所有加速的接口上安装一个筛选器,以捕获流量,而不仅仅是应用程序指定的流量。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。