Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Aug 1997 19:49:07 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        freebsd-bugs@hub.freebsd.org, j@uriah.heep.sax.de
Subject:   Re: bin/4218: change in ping behavior: -c now counts _received_ packets
Message-ID:  <199708030949.TAA11171@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
> > /sbin/ping -c <count> now pings until <count> pings are _received_,
> > not until <count> pings are sent.
> 
> I agree that this behaviour is not what one would usually expect from
> -c, but it seems to be this way in all ping -c versions i've seen so
> far.
> 
> What makes you think this has been changed recently?  You can easily

Reviewing of recent changes, the cvs logs, and previous discussions of
this problem :-).  Except that the problem is actually that "sent" is
now interpreted more strictly (packets for which sendto() fails are not
counted as "sent").  Ping still doesn't necessarily wait until <count>
pings are _received_.

> verify in CVS that it has been this way all the time for FreeBSD, at

Nope.  It has only been this way all the time in the FreeBSD man page :-).
The original 4.4Lite code is:

...
[in the main loop]
		if (npackets && nreceived >= npackets)
			break;
...
[in the SIGALRM handler]
	if (!npackets || ntransmitted < npackets)
		alarm((u_int)interval);
	else {
		if (nreceived) {
			waittime = 2 * tmax / 1000;
			if (!waittime)
				waittime = 1;
		} else
			waittime = MAXWAIT;
		(void)signal(SIGALRM, finish);
		^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
		(void)alarm((u_int)waittime);
		^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	}

Here npackets is the count for -c.  The test against `nreceived' in the
main loop is probably unnecessary, since nreceived should be <= ntransmitted
and the underlined SIGALRM handling will abort ping after `ntransmitted'
packets have been sent.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199708030949.TAA11171>