我有一个程序可以将arp数据包发送到网络中的所有主机,以确定哪些主机已启动,到目前为止工作正常。
我只是在为回复设置正确的超时时遇到一些困难,到目前为止我得到了这个:
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 10000; //0.01sec
if (setsockopt(sock_fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
...
}
...
if ((bytes = sendto(sock_fd, ether_frame, packet_length, 0, (struct sockaddr *) &device, sizeof (device))) <= 0) {
//error handle
} else {
if ((bytes = recv(sock_fd, packet, sizeof(packet), 0)) <= 0) {
...
} else {
...
当运行具有上述设定值0.01秒的程序时,我有时会得到所有回复,有时会丢失一些回复。当我将值增加到例如1秒我得到所有的价值。但是由于有很多请求要发送,1秒内需要花费大量时间才能完成。
有没有更好的方法来计算回复的超时?可能是动态的?