*** empty log message ***

This commit is contained in:
Marc Alexander Lehmann 2008-04-02 15:23:11 +00:00
parent 9205046692
commit b769df7da0
1 changed files with 49 additions and 3 deletions

52
ev.3
View File

@ -132,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "EV 1"
.TH EV 1 "2008-03-13" "perl v5.10.0" "User Contributed Perl Documentation"
.TH EV 1 "2008-04-02" "perl v5.10.0" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@ -406,6 +406,10 @@ flags. If that is troubling you, check \f(CW\*(C`ev_backend ()\*(C'\fR afterward
If you don't know what event loop to use, use the one returned from this
function.
.Sp
Note that this function is \fInot\fR thread-safe, so if you want to use it
from multiple threads, you have to lock (note also that this is unlikely,
as loops cannot bes hared easily between threads anyway).
.Sp
The default loop is the only loop that can handle \f(CW\*(C`ev_signal\*(C'\fR and
\&\f(CW\*(C`ev_child\*(C'\fR watchers, and to do this, it always registers a handler
for \f(CW\*(C`SIGCHLD\*(C'\fR. If this is a problem for your app you can either
@ -602,6 +606,10 @@ always distinct from the default loop. Unlike the default loop, it cannot
handle signal and child watchers, and attempts to do so will be greeted by
undefined behaviour (or a failed assertion if assertions are enabled).
.Sp
Note that this function \fIis\fR thread-safe, and the recommended way to use
libev with threads is indeed to create one loop per thread, and using the
default loop in the \*(L"main\*(R" or \*(L"initial\*(R" thread.
.Sp
Example: Try to create a event loop that uses epoll and nothing else.
.Sp
.Vb 3
@ -1221,6 +1229,19 @@ To support fork in your programs, you either have to call
enable \f(CW\*(C`EVFLAG_FORKCHECK\*(C'\fR, or resort to \f(CW\*(C`EVBACKEND_SELECT\*(C'\fR or
\&\f(CW\*(C`EVBACKEND_POLL\*(C'\fR.
.PP
\fIThe special problem of \s-1SIGPIPE\s0\fR
.IX Subsection "The special problem of SIGPIPE"
.PP
While not really specific to libev, it is easy to forget about \s-1SIGPIPE:\s0
when reading from a pipe whose other end has been closed, your program
gets send a \s-1SIGPIPE\s0, which, by default, aborts your program. For most
programs this is sensible behaviour, for daemons, this is usually
undesirable.
.PP
So when you encounter spurious, unexplained daemon exits, make sure you
ignore \s-1SIGPIPE\s0 (and maybe make sure you log the exit status of your daemon
somewhere, as that would have given you a big clue).
.PP
\fIWatcher-Specific Functions\fR
.IX Subsection "Watcher-Specific Functions"
.IP "ev_io_init (ev_io *, callback, int fd, int events)" 4
@ -1738,6 +1759,18 @@ 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
\fI\s-1ABI\s0 Issues (Largefile Support)\fR
.IX Subsection "ABI Issues (Largefile Support)"
.PP
Libev by default (unless the user overrides this) uses the default
compilation environment, which means that on systems with optionally
disabled large file support, you get the 32 bit version of the stat
structure. When using the library from programs that change the \s-1ABI\s0 to
use 64 bit file offsets the programs will fail. In that case you have to
compile libev with the same flags to get binary compatibility. This is
obviously the case with any flags that change the \s-1ABI\s0, but the problem is
most noticably with ev_stat and largefile support.
.PP
\fIInotify\fR
.IX Subsection "Inotify"
.PP
@ -2385,6 +2418,19 @@ section below on what exactly this means).
This call incurs the overhead of a syscall only once per loop iteration,
so while the overhead might be noticable, it doesn't apply to repeated
calls to \f(CW\*(C`ev_async_send\*(C'\fR.
.IP "bool = ev_async_pending (ev_async *)" 4
.IX Item "bool = ev_async_pending (ev_async *)"
Returns a non-zero value when \f(CW\*(C`ev_async_send\*(C'\fR has been called on the
watcher but the event has not yet been processed (or even noted) by the
event loop.
.Sp
\&\f(CW\*(C`ev_async_send\*(C'\fR sets a flag in the watcher and wakes up the loop. When
the loop iterates next and checks for the watcher to have become active,
it will reset the flag again. \f(CW\*(C`ev_async_pending\*(C'\fR can be used to very
quickly check wether invoking the loop might be a good idea.
.Sp
Not that this does \fInot\fR check wether the watcher itself is pending, only
wether it has been requested to make this watcher pending.
.SH "OTHER FUNCTIONS"
.IX Header "OTHER FUNCTIONS"
There are some other functions of possible interest. Described. Here. Now.
@ -3225,6 +3271,6 @@ Marc Lehmann <libev@schmorp.de>.
.SH "POD ERRORS"
.IX Header "POD ERRORS"
Hey! \fBThe above document had some coding errors, which are explained below:\fR
.IP "Around line 2951:" 4
.IX Item "Around line 2951:"
.IP "Around line 2996:" 4
.IX Item "Around line 2996:"
You forgot a '=back' before '=head2'