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 30int called = 0; 31 32static void 33signal_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 45int 46main(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 77out: 78 if (signal_int) 79 event_free(signal_int); 80 if (base) 81 event_base_free(base); 82 return ret; 83} 84 85