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.
> 

Reply via email to