terom@3: #ifndef LIB_SIGNAL_H terom@3: #define LIB_SIGNAL_H terom@3: terom@3: /* terom@3: * Handle signals in a libevent-sane way terom@3: */ terom@3: terom@3: #include terom@3: terom@3: /* terom@3: * How many signals we can define actions for terom@3: */ terom@3: #define MAX_SIGNALS 8 terom@3: terom@3: /* terom@3: * info about a set of signals terom@3: */ terom@3: struct signals; terom@3: terom@3: /* terom@3: * Used as a handler for signals that should cause a loopexit. terom@3: */ terom@3: void signals_loopexit (int signal, short event, void *arg); terom@3: terom@3: /* terom@3: * Used to receive signals, but discard them. terom@3: */ terom@3: void signals_ignore (int signal, short event, void *arg); terom@3: terom@3: /* terom@3: * Allocate a signals struct, acting on the given ev_base. terom@3: * terom@3: * Returns NULL on failure terom@3: */ terom@3: struct signals *signals_alloc (struct event_base *ev_base); terom@3: terom@3: /* terom@3: * Add a signal to be handled by the given signals struct with the given handler. terom@3: */ terom@3: int signals_add (struct signals *signals, int sigval, void (*sig_handler)(evutil_socket_t, short, void *)); terom@3: terom@3: /* terom@3: * Add a set of default signals terom@3: * SIGPIPE signals_ignore terom@3: * SIGINT signals_loopexit terom@3: */ terom@3: struct signals *signals_default (struct event_base *ev_base); terom@3: terom@3: /* terom@3: * Free the resources/handlers associated with the given signal handler terom@3: */ terom@3: void signals_free (struct signals *signals); terom@3: terom@3: #endif /* LIB_SIGNAL_H */