C 在加载时两次接收每个多播数据包?

C 在加载时两次接收每个多播数据包?,c,linux,udp,multicast,openonload,C,Linux,Udp,Multicast,Openonload,我正在收听来自外部源的多播数据 当我的应用程序在没有加载的情况下运行时,一切正常。然而,当我在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

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

当我的应用程序在没有加载的情况下运行时,一切正常。然而,当我在
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\u tcpdump
)以确认是否存在这种情况


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

什么是
Onload
?我不认为这是JavaScript
Onload
问题的标签。@jww Solarflare Onload