The -A option (beep when packets are dropped) didn't work quite

right; after a single packet was dropped it beeped after every
transmission.

Change its implementation to only output a bell when there is an
increase in the maximum value of the number of packets that were
sent but not yet received. This has the benefit that even for very
long round-trip times, ping -A will do roughly the right thing
after a few inital false-positives.

Reviewed by:	ru
This commit is contained in:
Ian Dowse 2001-09-25 20:22:33 +00:00
parent 5f802bfc9f
commit 2510719736
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=83940
2 changed files with 12 additions and 5 deletions

View File

@ -32,7 +32,7 @@
.\" @(#)ping.8 8.2 (Berkeley) 12/11/93
.\" $FreeBSD$
.\"
.Dd March 1, 1997
.Dd September 25, 2001
.Dt PING 8
.Os
.Sh NAME
@ -81,11 +81,14 @@ bytes used to fill out the packet. The options are as follows:
.Bl -tag -width indent
.It Fl A
Audible.
Include a bell
Output a bell
.Tn ( ASCII
0x07)
character in the output when no packet is received before the next packet
character when no packet is received before the next packet
is transmitted.
To cater for round-trip times that are longer than the interval
between transmissions, further missing packets cause a bell only
if the maximum number of unreceived packets has increased.
.It Fl a
Audible.
Include a bell

View File

@ -163,6 +163,7 @@ long npackets; /* max packets to transmit */
long nreceived; /* # of packets we got back */
long nrepeats; /* number of duplicates */
long ntransmitted; /* sequence # for outbound packets = #sent */
long nmissedmax; /* max value of ntransmitted - nreceived - 1 */
int interval = 1000; /* interval between packets, ms */
/* timing */
@ -706,8 +707,11 @@ main(argc, argv)
}
(void)gettimeofday(&last, NULL);
if (ntransmitted != nreceived+1 && options & F_MISSED)
(void)write(STDOUT_FILENO, &BBELL, 1);
if (ntransmitted - nreceived - 1 > nmissedmax) {
nmissedmax = ntransmitted - nreceived - 1;
if (options & F_MISSED)
(void)write(STDOUT_FILENO, &BBELL, 1);
}
}
}
finish();