两次接收每个多播数据包

时间:2019-11-27 15:55:56

标签: c linux udp multicast openonload

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

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

1 个答案:

答案 0 :(得分:0)

在应用程序中两次看到数据包的最可能的原因是,它两次到达主机,或者两次到达同一接口,或者两次到达不同接口。尝试运行数据包捕获(tcpdumponload_tcpdump)以确认是否是这种情况。

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