When interval is set to very small value with limited amount of packets,

ping6(8) would quit before the remote side gets a chance to respond.

Solve this by resetting the itimer when we have reached the maximum packet
number have reached, but let the other handling to continue.

PR:		bin/151023
Submitted by:	tjmao at tjmao.net
MFC after:	2 weeks
This commit is contained in:
Xin LI 2014-07-28 08:22:08 +00:00
parent adecd05bf0
commit dc91b5609a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=269180

View File

@ -1090,8 +1090,14 @@ main(int argc, char *argv[])
/* signal handling */
if (seenalrm) {
/* last packet sent, timeout reached? */
if (npackets && ntransmitted >= npackets)
break;
if (npackets && ntransmitted >= npackets) {
struct timeval zerotime = {0, 0};
itimer.it_value = zerotime;
itimer.it_interval = zerotime;
(void)setitimer(ITIMER_REAL, &itimer, NULL);
seenalrm = 0; /* clear flag */
continue;
}
retransmit();
seenalrm = 0;
continue;