【问题标题】:Receiving every multicast packet twice Onload?接收每个多播数据包两次 Onload?
【发布时间】:2019-11-27 15:55:56
【问题描述】:

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

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

【问题讨论】:

  • 什么是Onload?我不认为这是标记问题的 JavaScript Onload
  • @jww Solarflare Onload
  • 您找到解决方案了吗?因为我也有同样的问题
  • @tolgatanriverdi 不久前,但我认为这与 Linux 路由表有关。

标签: c linux udp multicast openonload


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2014-09-09
    • 2017-03-05
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多