xref: /aosp_15_r20/external/libevent/sample/signal-test.c (revision 663afb9b963571284e0f0a60f257164ab54f64bf)
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