我正在制作一堆子进程,每个孩子都必须为每个孩子制作一个具有不同 IP 的 arp 包,如果该机器打开,则发送包并从具有相应 IP 的机器接收包。问题是我正确发送包(我用wireshark检查)但我不知道为什么,我所有的子进程都收到相同的包。
例如我有 192.167.0.1,88.4.3.2 和 100.20.3.20。只有第一个 IP 是好的。我有 3 个子进程,每个子进程都发送一个请求并等待 8000000 纳秒的响应。唯一的响应来自带有第一个IP(因为是正确的)但我不知道为什么所有的孩子都会收到这个包裹。有什么建议吗?这是一段代码。我确信它可以正确发送包,因为我用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;
}
我用信息结构来检查一些东西。