You are now clearing only the first time.
> malloc & memset can be replaced with calloc in ping.c. Please see below
> for patch details:
>
> Index: ping.c
> ===================================================================
> RCS file: /cvs/src/sbin/ping/ping.c,v
> retrieving revision 1.100
> diff -u -p -u -r1.100 ping.c
> --- ping.c 24 Mar 2014 11:11:49 -0000 1.100
> +++ ping.c 22 Apr 2014 04:41:56 -0000
> @@ -508,8 +508,8 @@ main(int argc, char *argv[])
> catcher(0); /* start things going */
>
> fdmasks = howmany(s+1, NFDBITS) * sizeof(fd_mask);
> - if ((fdmaskp = (fd_set *)malloc(fdmasks)) == NULL)
> - err(1, "malloc");
> + if ((fdmaskp = calloc(1, fdmasks)) == NULL)
> + err(1, "calloc");
>
> for (;;) {
> struct sockaddr_in from;
> @@ -521,7 +521,6 @@ main(int argc, char *argv[])
> pinger();
> timeout.tv_sec = 0;
> timeout.tv_usec = 10000;
> - memset(fdmaskp, 0, fdmasks);
> FD_SET(s, fdmaskp);
> if (select(s + 1, (fd_set *)fdmaskp, (fd_set *)NULL,
> (fd_set *)NULL, &timeout) < 1)
>
>