X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fevent.h;h=c90e50679a171971bde932e51ed7f866d9ceae9e;hb=1c31a5dc4b17c274aac48444a3fe0da35a2b409c;hp=272243ff489330483d1293194bffb67c722eef9e;hpb=9415f4b08fb2ca9ae933edd0bf8b096db195ebae;p=meshlink diff --git a/src/event.h b/src/event.h index 272243ff..c90e5067 100644 --- a/src/event.h +++ b/src/event.h @@ -1,5 +1,5 @@ /* - event.h -- I/O and timeout event handling + event.h -- I/O, timeout and signal event handling Copyright (C) 2014 Guus Sliepen This program is free software; you can redistribute it and/or modify @@ -21,6 +21,7 @@ #define __MESHLINK_EVENT_H__ #include "splay_tree.h" +#include "system.h" #define IO_READ 1 #define IO_WRITE 2 @@ -29,6 +30,7 @@ typedef struct event_loop_t event_loop_t; typedef void (*io_cb_t)(event_loop_t *loop, void *data, int flags); typedef void (*timeout_cb_t)(event_loop_t *loop, void *data); +typedef void (*signal_cb_t)(event_loop_t *loop, void *data); typedef struct io_t { int fd; @@ -45,6 +47,13 @@ typedef struct timeout_t { struct splay_node_t node; } timeout_t; +typedef struct signal_t { + int signum; + signal_cb_t cb; + void *data; + struct splay_node_t node; +} signal_t; + struct event_loop_t { fd_set readfds; fd_set writefds; @@ -54,6 +63,10 @@ struct event_loop_t { splay_tree_t ios; splay_tree_t timeouts; + splay_tree_t signals; + + io_t signalio; + int pipefd[2]; void *data; }; @@ -66,6 +79,10 @@ extern void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, extern void timeout_del(event_loop_t *loop, timeout_t *timeout); extern void timeout_set(event_loop_t *loop, timeout_t *timeout, struct timeval *tv); +extern void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, uint8_t signum); +extern void signal_trigger(event_loop_t *loop, signal_t *sig); +extern void signal_del(event_loop_t *loop, signal_t *sig); + extern void event_loop_init(event_loop_t *loop); extern void event_loop_exit(event_loop_t *loop); extern bool event_loop_run(event_loop_t *loop);