1 #include "config.h" 2 3 #include <sys/types.h> 4 #ifdef HAVE_KQUEUE 5 #include <sys/event.h> 6 #endif 7 8 struct event; 9 10 typedef enum { 11 #ifdef HAVE_KQUEUE 12 EVENT_READ = EVFILT_READ, 13 EVENT_WRITE = EVFILT_WRITE, 14 EVENT_VNODE = EVFILT_VNODE, 15 #else 16 EVENT_READ, 17 EVENT_WRITE, 18 #endif 19 } event_t; 20 21 #define EV_FLAG_CLOSING 0x00000001 22 23 typedef void event_process_t(struct event *); 24 #ifdef HAVE_KQUEUE 25 typedef void event_vnode_process_t(struct event *, u_int); 26 #endif 27 28 struct event { 29 int fd; 30 int index; 31 event_t rdwr; 32 union { 33 event_process_t *process; 34 #ifdef HAVE_KQUEUE 35 event_vnode_process_t *process_vnode; 36 #endif 37 }; 38 void *data; 39 }; 40 41 typedef int event_module_add_t(struct event *); 42 typedef int event_module_del_t(struct event *, int flags); 43 typedef int event_module_init_t(void); 44 typedef void event_module_fini_t(void); 45 typedef int event_module_process_t(struct timeval *); 46 struct event_module { 47 event_module_add_t *add; 48 event_module_del_t *del; 49 event_module_process_t *process; 50 event_module_init_t *init; 51 event_module_fini_t *fini; 52 }; 53 54 extern struct event_module event_module; 55