gpt4 book ai didi

c - 接收每个组播数据包两次 Onload?

转载 作者:行者123 更新时间:2023-11-30 19:25:18 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于c - 接收每个组播数据包两次 Onload?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59074015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com