Add timestamped "aborting" message
This commit is contained in:
parent
16d5383fb8
commit
4a15bdac0a
1 changed files with 23 additions and 8 deletions
31
echoc.c
31
echoc.c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue