gpt4 book ai didi

c - linux子recvfrom没有正常工作

转载 作者:行者123 更新时间:2023-11-30 15:52:40 24 4
gpt4 key购买 nike

我正在创建一堆子进程,每个子进程必须为每个子进程创建一个具有不同IP的arp包,发送该包并从具有相应IP的机器接收包(如果该机器已打开)。问题是我正确发送了包(我用wireshark检查了这一点),但我不知道为什么,我的所有子进程都收到相同的包。

例如,我有 192.167.0.1,88.4.3.2 和 100.20.3.20。只有第一个 IP 是好的。我有 3 个子进程,每个进程发送一个请求并等待 8000000 纳秒的响应。唯一的响应来自 child 拥有第一个IP(因为这是正确的),但我不知道为什么所有的 child 都会收到这个包裹。有什么建议吗?这是一段代码。我确信它正确发送了包,因为我用wireshark对其进行了测试。

    if (sendto(sock,&req,sizeof(req),0,(struct sockaddr*)&addr,sizeof(addr))==-1) {
printf("%s",strerror(errno));
}
struct sockaddr_ll linkLayerAddr;
char buf[32];
int sockaddr_len=sizeof(linkLayerAddr);
memset(&linkLayerAddr,0,sizeof(linkLayerAddr));
fcntl(sock,F_SETFL,O_NONBLOCK);
nanosleep(&time1,NULL);

if(recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr*)&linkLayerAddr,&sockaddr_len)==-1){

info.status=0;
}
else{
info.status=1;

}

与我用来检查某些内容的信息结构不同。

最佳答案

ARP 数据包不包含端口号或用于描述目标应用程序的类似 ID。因此,所有收到的 ARP 包都会传递到所有 ARP 套接字。

在你的情况下:线程应该只选择想要的数据包并忽略其他数据包。

编辑:您可以循环直到收到所需的 ARP 响应数据包。这样:

while ( !time_out )
{
<receive next ARP packet>

if ( arph->ar_tip == wanted_ip )
{
// This is correct one. Handle it and break out from the loop.
<process the package>
break;
}
else
{
// This is not for me, ignore it silently.
}
}

关于c - linux子recvfrom没有正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14253098/

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