1 /* $NetBSD: signal-test.c,v 1.1.1.3 2021/04/07 02:43:15 christos Exp $ */ 2 /* 3 * Compile with: 4 * cc -I/usr/local/include -o signal-test \ 5 * signal-test.c -L/usr/local/lib -levent 6 */ 7 8 #include <sys/types.h> 9 10 #include <event2/event-config.h> 11 12 #include <sys/stat.h> 13 #ifndef _WIN32 14 #include <sys/queue.h> 15 #include <unistd.h> 16 #include <sys/time.h> 17 #else 18 #include <winsock2.h> 19 #include <windows.h> 20 #endif 21 #include <signal.h> 22 #include <fcntl.h> 23 #include <stdlib.h> 24 #include <stdio.h> 25 #include <string.h> 26 #include <errno.h> 27 28 #include <event2/event.h> 29 30 int called = 0; 31 32 static void 33 signal_cb(evutil_socket_t fd, short event, void *arg) 34 { 35 struct event *signal = arg; 36 37 printf("signal_cb: got signal %d\n", event_get_signal(signal)); 38 39 if (called >= 2) 40 event_del(signal); 41 42 called++; 43 } 44 45 int 46 main(int argc, char **argv) 47 { 48 struct event *signal_int = NULL; 49 struct event_base* base; 50 int ret = 0; 51 #ifdef _WIN32 52 WORD wVersionRequested; 53 WSADATA wsaData; 54 55 wVersionRequested = MAKEWORD(2, 2); 56 57 (void) WSAStartup(wVersionRequested, &wsaData); 58 #endif 59 60 /* Initialize the event library */ 61 base = event_base_new(); 62 if (!base) { 63 ret = 1; 64 goto out; 65 } 66 67 /* Initialize one event */ 68 signal_int = evsignal_new(base, SIGINT, signal_cb, event_self_cbarg()); 69 if (!signal_int) { 70 ret = 2; 71 goto out; 72 } 73 event_add(signal_int, NULL); 74 75 event_base_dispatch(base); 76 77 out: 78 if (signal_int) 79 event_free(signal_int); 80 if (base) 81 event_base_free(base); 82 return ret; 83 } 84 85