计算适当的arp回复超时c ++

时间:2015-02-08 18:37:35

标签: c++ timeout arp

我有一个程序可以将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秒内需要花费大量时间才能完成。

有没有更好的方法来计算回复的超时?可能是动态的?

0 个答案:

没有答案