345 |
struct timeval last, intvl, now; |
struct timeval last, intvl, now; |
346 |
struct timeval *t = NULL; |
struct timeval *t = NULL; |
347 |
int finishing = 0; |
int finishing = 0; |
348 |
|
int nresp = 0; |
349 |
|
|
350 |
signal (SIGINT, sig_int); |
signal (SIGINT, sig_int); |
351 |
|
|
352 |
fdmax = ping->ping_fd+1; |
fdmax = ping->ping_fd+1; |
400 |
} |
} |
401 |
else if (n == 1) |
else if (n == 1) |
402 |
{ |
{ |
403 |
len = ping_recv (ping); |
if (ping_recv (ping) == 0) |
404 |
|
nresp++; |
405 |
if (t == 0) |
if (t == 0) |
406 |
{ |
{ |
407 |
gettimeofday (&now, NULL); |
gettimeofday (&now, NULL); |
408 |
t = &now; |
t = &now; |
409 |
} |
} |
410 |
if (ping->ping_count && ping->ping_num_xmit >= ping->ping_count) |
if (ping->ping_count && nresp >= ping->ping_count) |
|
{ |
|
|
struct timeval tmp = last; |
|
|
tmp.tv_sec += 10; /* FIXME: should I make it configurable? */ |
|
|
if (timercmp (&tmp, &now, <=)) |
|
411 |
break; |
break; |
412 |
} |
} |
|
} |
|
413 |
else |
else |
414 |
{ |
{ |
415 |
if (!ping->ping_count || ping->ping_num_xmit < ping->ping_count) |
if (!ping->ping_count || ping->ping_num_xmit < ping->ping_count) |
423 |
else if (finishing) |
else if (finishing) |
424 |
break; |
break; |
425 |
else |
else |
426 |
{ |
{ |
427 |
finishing = 1; |
finishing = 1; |
428 |
|
|
429 |
intvl.tv_sec = MAXWAIT; |
intvl.tv_sec = MAXWAIT; |