such as poll (fortunately in our Xlib example, Xlib already does this on
its own, so its quite safe to use).
+=head3 The special problem of disappearing file descriptors
+
+Some backends (e.g kqueue, epoll) need to be told about closing a file
+descriptor (either by calling C<close> explicitly or by any other means,
+such as C<dup>). The reason is that you register interest in some file
+descriptor, but when it goes away, the operating system will silently drop
+this interest. If another file descriptor with the same number then is
+registered with libev, there is no efficient way to see that this is, in
+fact, a different file descriptor.
+
+To avoid having to explicitly tell libev about such cases, libev follows
+the following policy: Each time C<ev_io_set> is being called, libev
+will assume that this is potentially a new file descriptor, otherwise
+it is assumed that the file descriptor stays the same. That means that
+you I<have> to call C<ev_io_set> (or C<ev_io_init>) when you change the
+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.
+
+
+=head3 Watcher-Specific Functions
+
=over 4
=item ev_io_init (ev_io *, callback, int fd, int events)
but if multiple timers become ready during the same loop iteration then
order of execution is undefined.
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)
time (C<at>) has been passed, but if multiple periodic timers become ready
during the same loop iteration then order of execution is undefined.
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)
watcher for a signal is stopped libev will reset the signal handler to
SIG_DFL (regardless of what it was set to before).
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_signal_init (ev_signal *, callback, int signum)
Child watchers trigger when your process receives a SIGCHLD in response to
some child status changes (most typically when a child of yours dies).
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_child_init (ev_child *, callback, int pid)
usually detected immediately, and if the file exists there will be no
polling.
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)
"pseudo-background processing", or delay processing stuff to after the
event loop has handled all outstanding events.
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_idle_init (ev_signal *, callback)
C<ev_check> watcher ran (always remind yourself to coexist peacefully with
others).
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_prepare_init (ev_prepare *, callback)
else
loop_lo = loop_hi;
+=head3 Watcher-Specific Functions and Data Members
+
=over 4
=item ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)