On Sun, May 03, 2020 at 05:25:25PM +0100, Stuart Henderson wrote:
> Is it worth triggering this on SIGINFO? I use that often with ping(1).
I was going to suggest a similar diff but couldn't figure out why this
breaks the stats at the end with ^C.
>
> Index: tcpbench.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tcpbench/tcpbench.c,v
> retrieving revision 1.62
> diff -u -p -r1.62 tcpbench.c
> --- tcpbench.c 2 May 2020 22:00:29 -0000 1.62
> +++ tcpbench.c 3 May 2020 16:24:05 -0000
> @@ -213,6 +213,10 @@ signal_handler(int sig, short event, voi
> * signal handler rules don't apply, libevent decouples for us
> */
> switch (sig) {
> + case SIGINFO:
> + printf("\n");
> + wrapup(-1);
> + break;
> case SIGINT:
> printf("\n");
> wrapup(0);
> @@ -1109,7 +1113,8 @@ wrapup(int err)
> summary_display();
> }
>
> - exit(err);
> + if (err != -1)
> + exit(err);
> }
>
> int
> @@ -1126,7 +1131,7 @@ main(int argc, char **argv)
> int family = PF_UNSPEC;
> struct nlist nl[] = { { "_tcbtable" }, { "" } };
> const char *host = NULL, *port = DEFAULT_PORT, *srcbind = NULL;
> - struct event ev_sigint, ev_sigterm, ev_sighup, ev_progtimer;
> + struct event ev_sigint, ev_sigterm, ev_sighup, ev_siginfo, ev_progtimer;
> struct sockaddr_un sock_un;
>
> /* Init world */
> @@ -1362,9 +1367,11 @@ main(int argc, char **argv)
> signal_set(&ev_sigterm, SIGTERM, signal_handler, NULL);
> signal_set(&ev_sighup, SIGHUP, signal_handler, NULL);
> signal_set(&ev_sigint, SIGINT, signal_handler, NULL);
> + signal_set(&ev_siginfo, SIGINFO, signal_handler, NULL);
> signal_add(&ev_sigint, NULL);
> signal_add(&ev_sigterm, NULL);
> signal_add(&ev_sighup, NULL);
> + signal_add(&ev_siginfo, NULL);
> signal(SIGPIPE, SIG_IGN);
>
> if (UDP_MODE) {
>