/*      $NetBSD: signal-test.c,v 1.1.1.3 2021/04/07 02:43:15 christos Exp $     */
/*
* Compile with:
* cc -I/usr/local/include -o signal-test \
*   signal-test.c -L/usr/local/lib -levent
*/

#include <sys/types.h>

#include <event2/event-config.h>

#include <sys/stat.h>
#ifndef _WIN32
#include <sys/queue.h>
#include <unistd.h>
#include <sys/time.h>
#else
#include <winsock2.h>
#include <windows.h>
#endif
#include <signal.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <event2/event.h>

int called = 0;

static void
signal_cb(evutil_socket_t fd, short event, void *arg)
{
       struct event *signal = arg;

       printf("signal_cb: got signal %d\n", event_get_signal(signal));

       if (called >= 2)
               event_del(signal);

       called++;
}

int
main(int argc, char **argv)
{
       struct event *signal_int = NULL;
       struct event_base* base;
       int ret = 0;
#ifdef _WIN32
       WORD wVersionRequested;
       WSADATA wsaData;

       wVersionRequested = MAKEWORD(2, 2);

       (void) WSAStartup(wVersionRequested, &wsaData);
#endif

       /* Initialize the event library */
       base = event_base_new();
       if (!base) {
               ret = 1;
               goto out;
       }

       /* Initialize one event */
       signal_int = evsignal_new(base, SIGINT, signal_cb, event_self_cbarg());
       if (!signal_int) {
               ret = 2;
               goto out;
       }
       event_add(signal_int, NULL);

       event_base_dispatch(base);

out:
       if (signal_int)
               event_free(signal_int);
       if (base)
               event_base_free(base);
       return ret;
}