--- libev/ev.pod 2007/11/27 08:20:42 1.49 +++ libev/ev.pod 2007/11/27 10:59:11 1.50 @@ -50,7 +50,6 @@ to the C type in C, and when you need to do any calculations on it, you should treat it as such. - =head1 GLOBAL FUNCTIONS These functions can be called anytime, even before initialising the @@ -567,6 +566,15 @@ (for example, a C watcher might start an idle watcher to keep C from blocking). +=item C + +The embedded event loop specified in the C watcher needs attention. + +=item C + +The event loop has been resumed in the child process after fork (see +C). + =item C An unspecified error has occured, the watcher has been stopped. This might @@ -1472,6 +1480,27 @@ =back +=head2 C - the audacity to resume the event loop after a fork + +Fork watchers are called when a C was detected (usually because +whoever is a good citizen cared to tell libev about it by calling +C or C). The invocation is done before the +event loop blocks next and before C watchers are being called, +and only in the child after the fork. If whoever good citizen calling +C cheats and calls it in the wrong process, the fork +handlers will be invoked, too, of course. + +=over 4 + +=item ev_fork_init (ev_signal *, callback) + +Initialises and configures the fork watcher - it has no parameters of any +kind. There is a C macro, but using it is utterly pointless, +believe me. + +=back + + =head1 OTHER FUNCTIONS There are some other functions of possible interest. Described. Here. Now. @@ -1666,6 +1695,68 @@ io.start (fd, ev::READ); } + +=head1 MACRO MAGIC + +Libev can be compiled with a variety of options, the most fundemantal is +C. This option determines wether (most) functions and +callbacks have an initial C argument. + +To make it easier to write programs that cope with either variant, the +following macros are defined: + +=over 4 + +=item C, C + +This provides the loop I for functions, if one is required ("ev +loop argument"). The C form is used when this is the sole argument, +C is used when other arguments are following. Example: + + ev_unref (EV_A); + ev_timer_add (EV_A_ watcher); + ev_loop (EV_A_ 0); + +It assumes the variable C of type C is in scope, +which is often provided by the following macro. + +=item C, C + +This provides the loop I for functions, if one is required ("ev +loop parameter"). The C form is used when this is the sole parameter, +C is used when other parameters are following. Example: + + // this is how ev_unref is being declared + static void ev_unref (EV_P); + + // this is how you can declare your typical callback + static void cb (EV_P_ ev_timer *w, int revents) + +It declares a parameter C of type C, quite +suitable for use with C. + +=item C, C + +Similar to the other two macros, this gives you the value of the default +loop, if multiple loops are supported ("ev loop default"). + +=back + +Example: Declare and initialise a check watcher, working regardless of +wether multiple loops are supported or not. + + static void + check_cb (EV_P_ ev_timer *w, int revents) + { + ev_check_stop (EV_A_ w); + } + + ev_check check; + ev_check_init (&check, check_cb); + ev_check_start (EV_DEFAULT_ &check); + ev_loop (EV_DEFAULT_ 0); + + =head1 EMBEDDING Libev can (and often is) directly embedded into host @@ -1897,6 +1988,11 @@ If undefined or defined to be C<1>, then stat watchers are supported. If defined to be C<0>, then they are not. +=item EV_FORK_ENABLE + +If undefined or defined to be C<1>, then fork watchers are supported. If +defined to be C<0>, then they are not. + =item EV_MINIMAL If you need to shave off some kilobytes of code at the expense of some