Add timestamped "aborting" message

This commit is contained in:
Ludovic Pouzenc 2018-07-18 12:39:23 +02:00 committed by Matthieu Herrb
parent 16d5383fb8
commit 4a15bdac0a

31
echoc.c
View file

@ -37,6 +37,7 @@
int sock = -1; int sock = -1;
int verbose = 0; int verbose = 0;
int aborting = 0;
struct sockaddr *server; struct sockaddr *server;
socklen_t serverlen; socklen_t serverlen;
unsigned int seq = 0; unsigned int seq = 0;
@ -48,11 +49,16 @@ usage(void)
errx(2, "usage: echoc [-c nbr][-d][-i ms][-l len][-p port][-t ms][-v] server"); errx(2, "usage: echoc [-c nbr][-d][-i ms][-l len][-p port][-t ms][-v] server");
} }
static void
sigint_handler(int unused)
{
aborting = 1;
}
static void static void
send_packet(int unused) send_packet(int unused)
{ {
char *buf; char *buf;
buf = malloc(len); buf = malloc(len);
if (buf == NULL) if (buf == NULL)
return; return;
@ -172,9 +178,10 @@ main(int argc, char *argv[])
else else
ch = IP_PMTUDISC_DONT; ch = IP_PMTUDISC_DONT;
if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &ch, sizeof(ch)) < 0) if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &ch, sizeof(ch)) < 0)
err(2, "setsockopt IP_MTU_DISCOVER"); err(2, "setsockopt IP_MTU_DISCOVER");
#endif #endif
signal(SIGALRM, send_packet); signal(SIGALRM, send_packet);
signal(SIGINT, sigint_handler);
/* timer values */ /* timer values */
itv.it_interval.tv_usec = interval*1000; itv.it_interval.tv_usec = interval*1000;
@ -189,9 +196,9 @@ main(int argc, char *argv[])
strftime(date, sizeof(date), "%F %T", tm); strftime(date, sizeof(date), "%F %T", tm);
printf("%s.%06ld: starting\n", date, last_ts.tv_usec); printf("%s.%06ld: starting\n", date, last_ts.tv_usec);
while (1) { while (!aborting) {
/* poll() loop to handle interruptions by SIGALRM */ /* poll() loop to handle interruptions by SIGALRM */
while (1) { while (!aborting) {
pfd[0].fd = sock; pfd[0].fd = sock;
pfd[0].events = POLLIN; pfd[0].events = POLLIN;
nfds = poll(pfd, 1, timeout); nfds = poll(pfd, 1, timeout);
@ -207,11 +214,13 @@ main(int argc, char *argv[])
break; break;
} }
} }
if (aborting)
break;
if ((nfds == 0)) { if ((nfds == 0)) {
if (verbose) if (verbose)
printf("%d packet(s) dropped in %ld.%06ld s\n", printf("%d packet(s) dropped in %ld.%06ld s\n",
seq - last, (long)diff.tv_sec, diff.tv_usec); seq - last, (long)diff.tv_sec, diff.tv_usec);
if (disconnected == 1) { if (disconnected == 1) {
tm = localtime((time_t *)&last_ts.tv_sec); tm = localtime((time_t *)&last_ts.tv_sec);
strftime(date, sizeof(date), "%F %T", tm); strftime(date, sizeof(date), "%F %T", tm);
@ -227,11 +236,11 @@ main(int argc, char *argv[])
&addrlen)) != len) { &addrlen)) != len) {
warn("recvfrom"); warn("recvfrom");
} }
if (verbose && (serverlen != addrlen || if (verbose && (serverlen != addrlen ||
memcmp(&client, server, addrlen) != 0)) { memcmp(&client, server, addrlen) != 0)) {
if ((error = getnameinfo((struct sockaddr *)&client, if ((error = getnameinfo((struct sockaddr *)&client,
addrlen, name, sizeof(name), addrlen, name, sizeof(name),
NULL, 0, NI_DGRAM)) != 0) { NULL, 0, NI_DGRAM)) != 0) {
warnx("%s", gai_strerror(error)); warnx("%s", gai_strerror(error));
} else { } else {
@ -262,6 +271,12 @@ main(int argc, char *argv[])
} }
} }
} }
if (aborting) {
gettimeofday(&now, NULL);
tm = localtime((time_t *)&now.tv_sec);
strftime(date, sizeof(date), "%F %T", tm);
printf("%s.%06ld: aborting\n", date, now.tv_usec);
}
close(sock); close(sock);
exit(0); exit(0);
} }