]> git.llucax.com Git - software/libev.git/blobdiff - ev.3
*** empty log message ***
[software/libev.git] / ev.3
diff --git a/ev.3 b/ev.3
index 82d8e9bb7d704aad21be6d1bfd377aa0a517e5b8..a7805ec05c7f95a85c5e1917553fbeccc7699acb 100644 (file)
--- a/ev.3
+++ b/ev.3
 .rm #[ #] #H #V #F C
 .\" ========================================================================
 .\"
 .rm #[ #] #H #V #F C
 .\" ========================================================================
 .\"
-.IX Title ""<STANDARD INPUT>" 1"
-.TH "<STANDARD INPUT>" 1 "2007-12-12" "perl v5.8.8" "User Contributed Perl Documentation"
+.IX Title "EV 1"
+.TH EV 1 "2007-12-19" "perl v5.8.8" "User Contributed Perl Documentation"
 .SH "NAME"
 libev \- a high performance full\-featured event loop written in C
 .SH "SYNOPSIS"
 .SH "NAME"
 libev \- a high performance full\-featured event loop written in C
 .SH "SYNOPSIS"
@@ -245,7 +245,9 @@ Libev represents time as a single floating point number, representing the
 the beginning of 1970, details are complicated, don't ask). This type is
 called \f(CW\*(C`ev_tstamp\*(C'\fR, which is what you should use too. It usually aliases
 to the \f(CW\*(C`double\*(C'\fR type in C, and when you need to do any calculations on
 the beginning of 1970, details are complicated, don't ask). This type is
 called \f(CW\*(C`ev_tstamp\*(C'\fR, which is what you should use too. It usually aliases
 to the \f(CW\*(C`double\*(C'\fR type in C, and when you need to do any calculations on
-it, you should treat it as such.
+it, you should treat it as some floatingpoint value. Unlike the name
+component \f(CW\*(C`stamp\*(C'\fR might indicate, it is also used for time differences
+throughout libev.
 .SH "GLOBAL FUNCTIONS"
 .IX Header "GLOBAL FUNCTIONS"
 These functions can be called anytime, even before initialising the
 .SH "GLOBAL FUNCTIONS"
 .IX Header "GLOBAL FUNCTIONS"
 These functions can be called anytime, even before initialising the
@@ -557,8 +559,17 @@ etc.). None of the active event watchers will be stopped in the normal
 sense, so e.g. \f(CW\*(C`ev_is_active\*(C'\fR might still return true. It is your
 responsibility to either stop all watchers cleanly yoursef \fIbefore\fR
 calling this function, or cope with the fact afterwards (which is usually
 sense, so e.g. \f(CW\*(C`ev_is_active\*(C'\fR might still return true. It is your
 responsibility to either stop all watchers cleanly yoursef \fIbefore\fR
 calling this function, or cope with the fact afterwards (which is usually
-the easiest thing, youc na just ignore the watchers and/or \f(CW\*(C`free ()\*(C'\fR them
+the easiest thing, you can just ignore the watchers and/or \f(CW\*(C`free ()\*(C'\fR them
 for example).
 for example).
+.Sp
+Not that certain global state, such as signal state, will not be freed by
+this function, and related watchers (such as signal and child watchers)
+would need to be stopped manually.
+.Sp
+In general it is not advisable to call this function except in the
+rare occasion where you really need to free e.g. the signal handling
+pipe fds. If you need dynamically allocated loops it is better to use
+\&\f(CW\*(C`ev_loop_new\*(C'\fR and \f(CW\*(C`ev_loop_destroy\*(C'\fR).
 .IP "ev_loop_destroy (loop)" 4
 .IX Item "ev_loop_destroy (loop)"
 Like \f(CW\*(C`ev_default_destroy\*(C'\fR, but destroys an event loop created by an
 .IP "ev_loop_destroy (loop)" 4
 .IX Item "ev_loop_destroy (loop)"
 Like \f(CW\*(C`ev_default_destroy\*(C'\fR, but destroys an event loop created by an
@@ -1089,6 +1100,9 @@ descriptor even if the file descriptor number itself did not change.
 This is how one would do it normally anyway, the important point is that
 the libev application should not optimise around libev but should leave
 optimisations to libev.
 This is how one would do it normally anyway, the important point is that
 the libev application should not optimise around libev but should leave
 optimisations to libev.
+.PP
+\fIWatcher-Specific Functions\fR
+.IX Subsection "Watcher-Specific Functions"
 .IP "ev_io_init (ev_io *, callback, int fd, int events)" 4
 .IX Item "ev_io_init (ev_io *, callback, int fd, int events)"
 .PD 0
 .IP "ev_io_init (ev_io *, callback, int fd, int events)" 4
 .IX Item "ev_io_init (ev_io *, callback, int fd, int events)"
 .PD 0
@@ -1151,6 +1165,9 @@ on the current time, use something like this to adjust for this:
 The callback is guarenteed to be invoked only when its timeout has passed,
 but if multiple timers become ready during the same loop iteration then
 order of execution is undefined.
 The callback is guarenteed to be invoked only when its timeout has passed,
 but if multiple timers become ready during the same loop iteration then
 order of execution is undefined.
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)" 4
 .IX Item "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)"
 .PD 0
 .IP "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)" 4
 .IX Item "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)"
 .PD 0
@@ -1271,6 +1288,9 @@ rules.
 As with timers, the callback is guarenteed to be invoked only when the
 time (\f(CW\*(C`at\*(C'\fR) has been passed, but if multiple periodic timers become ready
 during the same loop iteration then order of execution is undefined.
 As with timers, the callback is guarenteed to be invoked only when the
 time (\f(CW\*(C`at\*(C'\fR) has been passed, but if multiple periodic timers become ready
 during the same loop iteration then order of execution is undefined.
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)" 4
 .IX Item "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)"
 .PD 0
 .IP "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)" 4
 .IX Item "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)"
 .PD 0
@@ -1372,6 +1392,10 @@ called.
 The current reschedule callback, or \f(CW0\fR, if this functionality is
 switched off. Can be changed any time, but changes only take effect when
 the periodic timer fires or \f(CW\*(C`ev_periodic_again\*(C'\fR is being called.
 The current reschedule callback, or \f(CW0\fR, if this functionality is
 switched off. Can be changed any time, but changes only take effect when
 the periodic timer fires or \f(CW\*(C`ev_periodic_again\*(C'\fR is being called.
+.IP "ev_tstamp at [read\-only]" 4
+.IX Item "ev_tstamp at [read-only]"
+When active, contains the absolute time that the watcher is supposed to
+trigger next.
 .PP
 Example: Call a callback every hour, or, more precisely, whenever the
 system clock is divisible by 3600. The callback invocation times have
 .PP
 Example: Call a callback every hour, or, more precisely, whenever the
 system clock is divisible by 3600. The callback invocation times have
@@ -1431,6 +1455,9 @@ with the kernel (thus it coexists with your own signal handlers as long
 as you don't register any with libev). Similarly, when the last signal
 watcher for a signal is stopped libev will reset the signal handler to
 \&\s-1SIG_DFL\s0 (regardless of what it was set to before).
 as you don't register any with libev). Similarly, when the last signal
 watcher for a signal is stopped libev will reset the signal handler to
 \&\s-1SIG_DFL\s0 (regardless of what it was set to before).
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_signal_init (ev_signal *, callback, int signum)" 4
 .IX Item "ev_signal_init (ev_signal *, callback, int signum)"
 .PD 0
 .IP "ev_signal_init (ev_signal *, callback, int signum)" 4
 .IX Item "ev_signal_init (ev_signal *, callback, int signum)"
 .PD 0
@@ -1447,6 +1474,9 @@ The signal the watcher watches out for.
 .IX Subsection "ev_child - watch out for process status changes"
 Child watchers trigger when your process receives a \s-1SIGCHLD\s0 in response to
 some child status changes (most typically when a child of yours dies).
 .IX Subsection "ev_child - watch out for process status changes"
 Child watchers trigger when your process receives a \s-1SIGCHLD\s0 in response to
 some child status changes (most typically when a child of yours dies).
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_child_init (ev_child *, callback, int pid)" 4
 .IX Item "ev_child_init (ev_child *, callback, int pid)"
 .PD 0
 .IP "ev_child_init (ev_child *, callback, int pid)" 4
 .IX Item "ev_child_init (ev_child *, callback, int pid)"
 .PD 0
@@ -1521,6 +1551,9 @@ semantics of \f(CW\*(C`ev_stat\*(C'\fR watchers, which means that libev sometime
 to fall back to regular polling again even with inotify, but changes are
 usually detected immediately, and if the file exists there will be no
 polling.
 to fall back to regular polling again even with inotify, but changes are
 usually detected immediately, and if the file exists there will be no
 polling.
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)" 4
 .IX Item "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)"
 .PD 0
 .IP "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)" 4
 .IX Item "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)"
 .PD 0
@@ -1609,6 +1642,9 @@ Apart from keeping your process non-blocking (which is a useful
 effect on its own sometimes), idle watchers are a good place to do
 \&\*(L"pseudo\-background processing\*(R", or delay processing stuff to after the
 event loop has handled all outstanding events.
 effect on its own sometimes), idle watchers are a good place to do
 \&\*(L"pseudo\-background processing\*(R", or delay processing stuff to after the
 event loop has handled all outstanding events.
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_idle_init (ev_signal *, callback)" 4
 .IX Item "ev_idle_init (ev_signal *, callback)"
 Initialises and configures the idle watcher \- it has no parameters of any
 .IP "ev_idle_init (ev_signal *, callback)" 4
 .IX Item "ev_idle_init (ev_signal *, callback)"
 Initialises and configures the idle watcher \- it has no parameters of any
@@ -1683,6 +1719,9 @@ their job. As \f(CW\*(C`ev_check\*(C'\fR watchers are often used to embed other
 loops those other event loops might be in an unusable state until their
 \&\f(CW\*(C`ev_check\*(C'\fR watcher ran (always remind yourself to coexist peacefully with
 others).
 loops those other event loops might be in an unusable state until their
 \&\f(CW\*(C`ev_check\*(C'\fR watcher ran (always remind yourself to coexist peacefully with
 others).
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_prepare_init (ev_prepare *, callback)" 4
 .IX Item "ev_prepare_init (ev_prepare *, callback)"
 .PD 0
 .IP "ev_prepare_init (ev_prepare *, callback)" 4
 .IX Item "ev_prepare_init (ev_prepare *, callback)"
 .PD 0
@@ -1939,6 +1978,9 @@ create it, and if that fails, use the normal loop for everything:
 \&  else
 \&    loop_lo = loop_hi;
 .Ve
 \&  else
 \&    loop_lo = loop_hi;
 .Ve
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)" 4
 .IX Item "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)"
 .PD 0
 .IP "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)" 4
 .IX Item "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)"
 .PD 0
@@ -1968,6 +2010,9 @@ event loop blocks next and before \f(CW\*(C`ev_check\*(C'\fR watchers are being
 and only in the child after the fork. If whoever good citizen calling
 \&\f(CW\*(C`ev_default_fork\*(C'\fR cheats and calls it in the wrong process, the fork
 handlers will be invoked, too, of course.
 and only in the child after the fork. If whoever good citizen calling
 \&\f(CW\*(C`ev_default_fork\*(C'\fR cheats and calls it in the wrong process, the fork
 handlers will be invoked, too, of course.
+.PP
+\fIWatcher-Specific Functions and Data Members\fR
+.IX Subsection "Watcher-Specific Functions and Data Members"
 .IP "ev_fork_init (ev_signal *, callback)" 4
 .IX Item "ev_fork_init (ev_signal *, callback)"
 Initialises and configures the fork watcher \- it has no parameters of any
 .IP "ev_fork_init (ev_signal *, callback)" 4
 .IX Item "ev_fork_init (ev_signal *, callback)"
 Initialises and configures the fork watcher \- it has no parameters of any
@@ -2171,18 +2216,18 @@ constructor already stores the event loop.
 .IP "w\->stop ()" 4
 .IX Item "w->stop ()"
 Stops the watcher if it is active. Again, no \f(CW\*(C`loop\*(C'\fR argument.
 .IP "w\->stop ()" 4
 .IX Item "w->stop ()"
 Stops the watcher if it is active. Again, no \f(CW\*(C`loop\*(C'\fR argument.
-.ie n .IP "w\->again ()       ""ev::timer""\fR, \f(CW""ev::periodic"" only" 4
-.el .IP "w\->again ()       \f(CWev::timer\fR, \f(CWev::periodic\fR only" 4
-.IX Item "w->again ()       ev::timer, ev::periodic only"
+.ie n .IP "w\->again () (""ev::timer""\fR, \f(CW""ev::periodic"" only)" 4
+.el .IP "w\->again () (\f(CWev::timer\fR, \f(CWev::periodic\fR only)" 4
+.IX Item "w->again () (ev::timer, ev::periodic only)"
 For \f(CW\*(C`ev::timer\*(C'\fR and \f(CW\*(C`ev::periodic\*(C'\fR, this invokes the corresponding
 \&\f(CW\*(C`ev_TYPE_again\*(C'\fR function.
 For \f(CW\*(C`ev::timer\*(C'\fR and \f(CW\*(C`ev::periodic\*(C'\fR, this invokes the corresponding
 \&\f(CW\*(C`ev_TYPE_again\*(C'\fR function.
-.ie n .IP "w\->sweep ()       ""ev::embed"" only" 4
-.el .IP "w\->sweep ()       \f(CWev::embed\fR only" 4
-.IX Item "w->sweep ()       ev::embed only"
+.ie n .IP "w\->sweep () (""ev::embed"" only)" 4
+.el .IP "w\->sweep () (\f(CWev::embed\fR only)" 4
+.IX Item "w->sweep () (ev::embed only)"
 Invokes \f(CW\*(C`ev_embed_sweep\*(C'\fR.
 Invokes \f(CW\*(C`ev_embed_sweep\*(C'\fR.
-.ie n .IP "w\->update ()      ""ev::stat"" only" 4
-.el .IP "w\->update ()      \f(CWev::stat\fR only" 4
-.IX Item "w->update ()      ev::stat only"
+.ie n .IP "w\->update () (""ev::stat"" only)" 4
+.el .IP "w\->update () (\f(CWev::stat\fR only)" 4
+.IX Item "w->update () (ev::stat only)"
 Invokes \f(CW\*(C`ev_stat_stat\*(C'\fR.
 .RE
 .RS 4
 Invokes \f(CW\*(C`ev_stat_stat\*(C'\fR.
 .RE
 .RS 4
@@ -2216,9 +2261,9 @@ the constructor.
 .Ve
 .SH "MACRO MAGIC"
 .IX Header "MACRO MAGIC"
 .Ve
 .SH "MACRO MAGIC"
 .IX Header "MACRO MAGIC"
-Libev can be compiled with a variety of options, the most fundemantal is
-\&\f(CW\*(C`EV_MULTIPLICITY\*(C'\fR. This option determines whether (most) functions and
-callbacks have an initial \f(CW\*(C`struct ev_loop *\*(C'\fR argument.
+Libev can be compiled with a variety of options, the most fundamantal
+of which is \f(CW\*(C`EV_MULTIPLICITY\*(C'\fR. This option determines whether (most)
+functions and callbacks have an initial \f(CW\*(C`struct ev_loop *\*(C'\fR argument.
 .PP
 To make it easier to write programs that cope with either variant, the
 following macros are defined:
 .PP
 To make it easier to write programs that cope with either variant, the
 following macros are defined:
@@ -2586,6 +2631,36 @@ definition and a statement, respectively. See the \fIev.v\fR header file for
 their default definitions. One possible use for overriding these is to
 avoid the \f(CW\*(C`struct ev_loop *\*(C'\fR as first argument in all cases, or to use
 method calls instead of plain function calls in \*(C+.
 their default definitions. One possible use for overriding these is to
 avoid the \f(CW\*(C`struct ev_loop *\*(C'\fR as first argument in all cases, or to use
 method calls instead of plain function calls in \*(C+.
+.Sh "\s-1EXPORTED\s0 \s-1API\s0 \s-1SYMBOLS\s0"
+.IX Subsection "EXPORTED API SYMBOLS"
+If you need to re-export the \s-1API\s0 (e.g. via a dll) and you need a list of
+exported symbols, you can use the provided \fISymbol.*\fR files which list
+all public symbols, one per line:
+.Sp
+.Vb 2
+\&  Symbols.ev      for libev proper
+\&  Symbols.event   for the libevent emulation
+.Ve
+.Sp
+This can also be used to rename all public symbols to avoid clashes with
+multiple versions of libev linked together (which is obviously bad in
+itself, but sometimes it is inconvinient to avoid this).
+.Sp
+A sed comamnd like this will create wrapper \f(CW\*(C`#define\*(C'\fR's that you need to
+include before including \fIev.h\fR:
+.Sp
+.Vb 1
+\&   <Symbols.ev sed -e "s/.*/#define & myprefix_&/" >wrap.h
+.Ve
+.Sp
+This would create a file \fIwrap.h\fR which essentially looks like this:
+.Sp
+.Vb 4
+\&   #define ev_backend     myprefix_ev_backend
+\&   #define ev_check_start myprefix_ev_check_start
+\&   #define ev_check_stop  myprefix_ev_check_stop
+\&   ...
+.Ve
 .Sh "\s-1EXAMPLES\s0"
 .IX Subsection "EXAMPLES"
 For a real-world example of a program the includes libev
 .Sh "\s-1EXAMPLES\s0"
 .IX Subsection "EXAMPLES"
 For a real-world example of a program the includes libev