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