我正在做一堆子進程,每個孩子必須爲每個孩子製作一個不同IP的ARP包,發送包並從機器接收包含相應IP的包如果該機器是打開的。問題是我正確地發送包(我用wireshark檢查了這個),但我不知道爲什麼,我的所有子進程都收到相同的包。linux孩子recvfrom不工作,因爲它應該
例如我有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;
}
與我使用只是爲了檢查一些信息結構吳丹的事情。
代碼在哪裏? – kmkaplan
增加了一些code.Maybe它是因爲套接字? –
原始套接字沒有連接,所以接收者獲取所有數據包,而不僅僅是與他們發送的數據包相關的數據包。 – Barmar