15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Compile with:
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cc -I/usr/local/include -o signal-test \
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   signal-test.c -L/usr/local/lib -levent
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_CONFIG_H
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "config.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/stat.h>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef WIN32
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/queue.h>
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <unistd.h>
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/time.h>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <signal.h>
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <errno.h>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <event.h>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int called = 0;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)signal_cb(int fd, short event, void *arg)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct event *signal = arg;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	printf("%s: got signal %d\n", __func__, EVENT_SIGNAL(signal));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (called >= 2)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		event_del(signal);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	called++;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)main (int argc, char **argv)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct event signal_int;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/* Initalize the event library */
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_init();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/* Initalize one event */
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_set(&signal_int, SIGINT, EV_SIGNAL|EV_PERSIST, signal_cb,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    &signal_int);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_add(&signal_int, NULL);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_dispatch();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return (0);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
64