summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2008-05-26 15:54:30 +0000
committerDimitri Sokolyuk <demon@dim13.org>2008-05-26 15:54:30 +0000
commitdda02fb81452acb1878338e09ab992a1c3c18830 (patch)
treec2ede3fe4b451c0fcb6e8c877aac93dc5f096293
parentae19a6e7eef9d9bc599717456e9ba810e308fa3a (diff)
add signal handler
-rw-r--r--netmet2.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/netmet2.c b/netmet2.c
index a2f8fcb..466b462 100644
--- a/netmet2.c
+++ b/netmet2.c
@@ -24,6 +24,7 @@
#include <net/if_types.h>
#include <ifaddrs.h>
#include <curses.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -50,6 +51,7 @@ SIMPLEQ_HEAD(, data) head;
int hascolors;
extern int LINES, COLS;
+int dieflag = 0;
void initscreen(int);
void display(void);
@@ -58,6 +60,7 @@ void updatedata(int, int);
int findif(int, int, char **);
int readdata(int, char *, void *);
void mvwprintw2(WINDOW *, int, int, char *, int);
+void die(int);
__dead void usage(void);
int
@@ -81,6 +84,8 @@ main(int argc, char **argv)
argc -= optind;
argv += optind;
+ signal(SIGINT, die);
+
sock = socket(AF_INET, SOCK_DGRAM, 0);
num = findif(sock, argc, argv);
if (num == 0)
@@ -89,7 +94,7 @@ main(int argc, char **argv)
initscreen(num);
curs_set(0);
- for (;;) {
+ while (!dieflag) {
updatedata(sock, del);
display2();
doupdate();
@@ -301,6 +306,13 @@ readdata(int sock, char *name, void *data)
return ioctl(sock, SIOCGIFDATA, (caddr_t)&ifr);
}
+void
+die(int ignored)
+{
+ (void)ignored;
+ dieflag = 1;
+}
+
__dead void
usage(void)
{