I believe most of the new local variables you added in main, can instead be added in the flush loop you wrote, even if you have to instantiate them. Or move it into a new function, then it is even easier. their scope is just too large...
> @@ -240,6 +240,17 @@ void pr_retip6(struct ip6_hdr *, > u_char *); > int > main(int argc, char *argv[]) > { > + struct msghdr m; > + union { > + struct cmsghdr hdr; > + u_char buf[CMSG_SPACE(1024)]; > + } cmsgbuf; > + struct iovec iov[1]; > + struct pollfd pfd; > + struct sockaddr_in peer4; > + struct sockaddr_in6 peer6; > + ssize_t cc; > + > struct addrinfo hints, *res; > struct itimerval itimer; > struct sockaddr *from, *dst; > @@ -786,6 +797,44 @@ main(int argc, char *argv[]) > smsghdr.msg_iov = &smsgiov; > smsghdr.msg_iovlen = 1; > > + if (v6flag) { > + m.msg_name = &peer6; > + m.msg_namelen = sizeof(peer6); > + } else { > + m.msg_name = &peer4; > + m.msg_namelen = sizeof(peer4); > + } > + memset(&iov, 0, sizeof(iov)); > + iov[0].iov_base = (caddr_t)packet; > + iov[0].iov_len = packlen; > + > + /* Drain our socket. */ > + (void)signal(SIGALRM, onsignal); > + memset(&itimer, 0, sizeof(itimer)); > + itimer.it_value.tv_sec = 1; /* make sure we don't get stuck */ > + (void)setitimer(ITIMER_REAL, &itimer, NULL); > + for (;;) { > + if (seenalrm) > + break; > + > + pfd.fd = s; > + pfd.events = POLLIN; > + > + if (poll(&pfd, 1, 0) <= 0) > + break; > + > + m.msg_iov = iov; > + m.msg_iovlen = 1; > + m.msg_control = (caddr_t)&cmsgbuf.buf; > + m.msg_controllen = sizeof(cmsgbuf.buf); > + > + cc = recvmsg(s, &m, 0); > + if (cc == -1 && errno != EINTR) > + break; > + } > + memset(&itimer, 0, sizeof(itimer)); > + (void)setitimer(ITIMER_REAL, &itimer, NULL); > + > while (preload--) /* Fire off them quickies. */ > pinger(s); > > @@ -805,17 +854,7 @@ main(int argc, char *argv[]) > seeninfo = 0; > > for (;;) { > - struct msghdr m; > - union { > - struct cmsghdr hdr; > - u_char buf[CMSG_SPACE(1024)]; > - } cmsgbuf; > - struct iovec iov[1]; > - struct pollfd pfd; > - struct sockaddr_in peer4; > - struct sockaddr_in6 peer6; > - ssize_t cc; > - int timeout; > + int timeout; > > /* signal handling */ > if (seenint) > @@ -864,16 +903,6 @@ main(int argc, char *argv[]) > if (poll(&pfd, 1, timeout) <= 0) > continue; > > - if (v6flag) { > - m.msg_name = &peer6; > - m.msg_namelen = sizeof(peer6); > - } else { > - m.msg_name = &peer4; > - m.msg_namelen = sizeof(peer4); > - } > - memset(&iov, 0, sizeof(iov)); > - iov[0].iov_base = (caddr_t)packet; > - iov[0].iov_len = packlen; > m.msg_iov = iov; > m.msg_iovlen = 1; > m.msg_control = (caddr_t)&cmsgbuf.buf; > > > -- > I'm not entirely sure you are real. >