X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/469af6002e7d33bcc351c1113afb188c3c246b91..2fde047707205b8d8f1c71482d2df57105217e17:/ev.h?ds=sidebyside diff --git a/ev.h b/ev.h index 3c550e2..0454138 100644 --- a/ev.h +++ b/ev.h @@ -34,15 +34,16 @@ typedef double ev_tstamp; /* eventmask, revents, events... */ #define EV_UNDEF -1 /* guaranteed to be invalid */ -#define EV_NONE 0x00 -#define EV_READ 0x01 -#define EV_WRITE 0x02 -#define EV_TIMEOUT 0x04 -#define EV_SIGNAL 0x08 -#define EV_IDLE 0x10 -#define EV_CHECK 0x20 -#define EV_PREPARE 0x40 -#define EV_ERROR (0x7f|0x80) +#define EV_NONE 0x000000 +#define EV_READ 0x000001 +#define EV_WRITE 0x000002 +#define EV_TIMEOUT 0x000004 +#define EV_SIGNAL 0x000008 +#define EV_IDLE 0x000010 +#define EV_CHECK 0x000020 +#define EV_PREPARE 0x000040 +#define EV_CHILD 0x000080 +#define EV_ERROR 0x800000 /* can be used to add custom fields to all watchers */ #ifndef EV_COMMON @@ -52,6 +53,9 @@ typedef double ev_tstamp; # define EV_PROTOTYPES 1 #endif +#define EV_VERSION_MAJOR 1 +#define EV_VERSION_MINOR 1 + /* * struct member types: * private: you can look at them, but not change them, and they might not mean anything to you. @@ -141,12 +145,23 @@ struct ev_check EV_WATCHER (ev_check); }; +/* invoked when sigchld is received and waitpid indicates the givne pid */ +struct ev_child +{ + EV_WATCHER_LIST (ev_child); + + int pid; /* ro */ + int status; /* rw, holds the exit status, use the macros from sys/wait.h */ +}; + #define EVMETHOD_NONE 0 #define EVMETHOD_SELECT 1 #define EVMETHOD_EPOLL 2 #if EV_PROTOTYPES extern int ev_method; int ev_init (int flags); /* returns ev_method */ +int ev_version_major (void); +int ev_version_minor (void); /* these three calls are suitable for plugging into pthread_atfork */ void ev_prefork (void); @@ -179,6 +194,7 @@ void ev_once (int fd, int events, ev_tstamp timeout, void (*cb)(int revents, voi #define evidle_set(ev) /* nop, yes, this is a serious in-joke */ #define evprepare_set(ev) /* nop, yes, this is a serious in-joke */ #define evcheck_set(ev) /* nop, yes, this is a serious in-joke */ +#define evchild_set(ev,pid_) do { (ev)->pid = (pid_); } while (0) #define evio_init(ev,cb,fd,events) do { evw_init ((ev), (cb)); evio_set ((ev),(fd),(events)); } while (0) #define evtimer_init(ev,cb,after,repeat) do { evw_init ((ev), (cb)); evtimer_set ((ev),(after),(repeat)); } while (0) @@ -187,6 +203,7 @@ void ev_once (int fd, int events, ev_tstamp timeout, void (*cb)(int revents, voi #define evidle_init(ev,cb) do { evw_init ((ev), (cb)); evidle_set ((ev)); } while (0) #define evprepare_init(ev,cb) do { evw_init ((ev), (cb)); evprepare_set ((ev)); } while (0) #define evcheck_init(ev,cb) do { evw_init ((ev), (cb)); evcheck_set ((ev)); } while (0) +#define evchild_init(ev,cb,pid) do { evw_init ((ev), (cb)); evchild_set ((ev),(pid)); } while (0) #define ev_is_active(ev) (0 + (ev)->active) /* true when the watcher has been started */ @@ -214,6 +231,9 @@ void evprepare_stop (struct ev_prepare *w); void evcheck_start (struct ev_check *w); void evcheck_stop (struct ev_check *w); + +void evchild_start (struct ev_child *w); +void evchild_stop (struct ev_child *w); #endif #endif