ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.pm
Revision: 1.56
Committed: Tue Nov 27 10:59:10 2007 UTC (16 years, 5 months ago) by root
Branch: MAIN
CVS Tags: rel-1_4
Changes since 1.55: +58 -35 lines
Log Message:
docs

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.20 EV - perl interface to libev, a high performance full-featured event loop
4 root 1.1
5     =head1 SYNOPSIS
6    
7 root 1.11 use EV;
8    
9 root 1.20 # TIMERS
10 root 1.11
11     my $w = EV::timer 2, 0, sub {
12     warn "is called after 2s";
13     };
14    
15 root 1.35 my $w = EV::timer 2, 2, sub {
16     warn "is called roughly every 2s (repeat = 2)";
17 root 1.11 };
18    
19     undef $w; # destroy event watcher again
20    
21 root 1.30 my $w = EV::periodic 0, 60, 0, sub {
22 root 1.11 warn "is called every minute, on the minute, exactly";
23     };
24    
25     # IO
26    
27 root 1.20 my $w = EV::io *STDIN, EV::READ, sub {
28 root 1.35 my ($w, $revents) = @_; # all callbacks receive the watcher and event mask
29 root 1.20 warn "stdin is readable, you entered: ", <STDIN>;
30 root 1.11 };
31    
32     # SIGNALS
33    
34     my $w = EV::signal 'QUIT', sub {
35     warn "sigquit received\n";
36     };
37    
38 root 1.16 # CHILD/PID STATUS CHANGES
39    
40     my $w = EV::child 666, sub {
41 root 1.27 my ($w, $revents) = @_;
42     my $status = $w->rstatus;
43 root 1.16 };
44 root 1.54
45     # STAT CHANGES
46     my $w = EV::stat "/etc/passwd", 10, sub {
47     my ($w, $revents) = @_;
48     warn $w->path, " has changed somehow.\n";
49     };
50 root 1.11
51     # MAINLOOP
52 root 1.39 EV::loop; # loop until EV::unloop is called or all watchers stop
53 root 1.20 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled
54     EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block
55 root 1.2
56 root 1.1 =head1 DESCRIPTION
57    
58 root 1.16 This module provides an interface to libev
59 root 1.52 (L<http://software.schmorp.de/pkg/libev.html>). While the documentation
60     below is comprehensive, one might also consult the documentation of libev
61     itself (L<http://cvs.schmorp.de/libev/ev.html>) for more subtle details on
62     watcher semantics or some discussion on the available backends, or how to
63     force a specific backend with C<LIBEV_FLAGS>.
64 root 1.1
65     =cut
66    
67     package EV;
68    
69     use strict;
70    
71     BEGIN {
72 root 1.54 our $VERSION = '1.4';
73 root 1.1 use XSLoader;
74     XSLoader::load "EV", $VERSION;
75     }
76    
77 root 1.49 @EV::IO::ISA =
78 root 1.18 @EV::Timer::ISA =
79     @EV::Periodic::ISA =
80     @EV::Signal::ISA =
81 root 1.56 @EV::Child::ISA =
82     @EV::Stat::ISA =
83 root 1.18 @EV::Idle::ISA =
84     @EV::Prepare::ISA =
85     @EV::Check::ISA =
86 root 1.54 @EV::Embed::ISA =
87 root 1.56 @EV::Fork::ISA =
88     "EV::Watcher";
89 root 1.15
90 root 1.8 =head1 BASIC INTERFACE
91 root 1.1
92     =over 4
93    
94 root 1.8 =item $EV::DIED
95    
96     Must contain a reference to a function that is called when a callback
97     throws an exception (with $@ containing thr error). The default prints an
98     informative message and continues.
99    
100     If this callback throws an exception it will be silently ignored.
101    
102 root 1.20 =item $time = EV::time
103    
104     Returns the current time in (fractional) seconds since the epoch.
105    
106 root 1.2 =item $time = EV::now
107    
108 root 1.20 Returns the time the last event loop iteration has been started. This
109     is the time that (relative) timers are based on, and refering to it is
110     usually faster then calling EV::time.
111    
112 root 1.41 =item $method = EV::method
113 root 1.20
114     Returns an integer describing the backend used by libev (EV::METHOD_SELECT
115     or EV::METHOD_EPOLL).
116    
117     =item EV::loop [$flags]
118 root 1.2
119 root 1.20 Begin checking for events and calling callbacks. It returns when a
120 root 1.39 callback calls EV::unloop.
121 root 1.2
122 root 1.20 The $flags argument can be one of the following:
123 root 1.2
124 root 1.20 0 as above
125     EV::LOOP_ONESHOT block at most once (wait, but do not loop)
126     EV::LOOP_NONBLOCK do not block at all (fetch/handle events but do not wait)
127 root 1.2
128 root 1.39 =item EV::unloop [$how]
129 root 1.2
130 root 1.39 When called with no arguments or an argument of EV::UNLOOP_ONE, makes the
131     innermost call to EV::loop return.
132 root 1.2
133 root 1.39 When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as
134 root 1.20 fast as possible.
135 root 1.2
136 root 1.48 =item EV::once $fh_or_undef, $events, $timeout, $cb->($revents)
137 root 1.47
138     This function rolls together an I/O and a timer watcher for a single
139     one-shot event without the need for managing a watcher object.
140    
141     If C<$fh_or_undef> is a filehandle or file descriptor, then C<$events>
142     must be a bitset containing either C<EV::READ>, C<EV::WRITE> or C<EV::READ
143     | EV::WRITE>, indicating the type of I/O event you want to wait for. If
144     you do not want to wait for some I/O event, specify C<undef> for
145     C<$fh_or_undef> and C<0> for C<$events>).
146    
147     If timeout is C<undef> or negative, then there will be no
148     timeout. Otherwise a EV::timer with this value will be started.
149    
150     When an error occurs or either the timeout or I/O watcher triggers, then
151     the callback will be called with the received event set (in general
152     you can expect it to be a combination of C<EV:ERROR>, C<EV::READ>,
153     C<EV::WRITE> and C<EV::TIMEOUT>).
154    
155     EV::once doesn't return anything: the watchers stay active till either
156     of them triggers, then they will be stopped and freed, and the callback
157     invoked.
158    
159 root 1.20 =back
160    
161 root 1.54 =head2 WATCHER OBJECTS
162 root 1.2
163 root 1.20 A watcher is an object that gets created to record your interest in some
164     event. For instance, if you want to wait for STDIN to become readable, you
165     would create an EV::io watcher for that:
166    
167     my $watcher = EV::io *STDIN, EV::READ, sub {
168     my ($watcher, $revents) = @_;
169     warn "yeah, STDIN should not be readable without blocking!\n"
170     };
171 root 1.2
172 root 1.20 All watchers can be active (waiting for events) or inactive (paused). Only
173     active watchers will have their callbacks invoked. All callbacks will be
174     called with at least two arguments: the watcher and a bitmask of received
175     events.
176    
177     Each watcher type has its associated bit in revents, so you can use the
178     same callback for multiple watchers. The event mask is named after the
179     type, i..e. EV::child sets EV::CHILD, EV::prepare sets EV::PREPARE,
180     EV::periodic sets EV::PERIODIC and so on, with the exception of IO events
181     (which can set both EV::READ and EV::WRITE bits), and EV::timer (which
182     uses EV::TIMEOUT).
183    
184     In the rare case where one wants to create a watcher but not start it at
185     the same time, each constructor has a variant with a trailing C<_ns> in
186     its name, e.g. EV::io has a non-starting variant EV::io_ns and so on.
187    
188     Please note that a watcher will automatically be stopped when the watcher
189 root 1.23 object is destroyed, so you I<need> to keep the watcher objects returned by
190 root 1.20 the constructors.
191    
192 root 1.23 Also, all methods changing some aspect of a watcher (->set, ->priority,
193     ->fh and so on) automatically stop and start it again if it is active,
194     which means pending events get lost.
195    
196 root 1.54 =head2 COMMON WATCHER METHODS
197 root 1.20
198 root 1.54 This section lists methods common to all watchers.
199 root 1.20
200     =over 4
201 root 1.2
202 root 1.20 =item $w->start
203    
204     Starts a watcher if it isn't active already. Does nothing to an already
205     active watcher. By default, all watchers start out in the active state
206     (see the description of the C<_ns> variants if you need stopped watchers).
207    
208     =item $w->stop
209 root 1.2
210 root 1.20 Stop a watcher if it is active. Also clear any pending events (events that
211     have been received but that didn't yet result in a callback invocation),
212     regardless of wether the watcher was active or not.
213 root 1.2
214 root 1.20 =item $bool = $w->is_active
215 root 1.2
216 root 1.20 Returns true if the watcher is active, false otherwise.
217    
218 root 1.30 =item $current_data = $w->data
219    
220     =item $old_data = $w->data ($new_data)
221    
222     Queries a freely usable data scalar on the watcher and optionally changes
223     it. This is a way to associate custom data with a watcher:
224    
225     my $w = EV::timer 60, 0, sub {
226     warn $_[0]->data;
227     };
228     $w->data ("print me!");
229    
230 root 1.20 =item $current_cb = $w->cb
231    
232     =item $old_cb = $w->cb ($new_cb)
233    
234 root 1.23 Queries the callback on the watcher and optionally changes it. You can do
235     this at any time without the watcher restarting.
236    
237     =item $current_priority = $w->priority
238    
239     =item $old_priority = $w->priority ($new_priority)
240    
241     Queries the priority on the watcher and optionally changes it. Pending
242     watchers with higher priority will be invoked first. The valid range of
243 root 1.24 priorities lies between EV::MAXPRI (default 2) and EV::MINPRI (default
244     -2). If the priority is outside this range it will automatically be
245 root 1.23 normalised to the nearest valid priority.
246    
247 root 1.50 The default priority of any newly-created watcher is 0.
248    
249     Note that the priority semantics have not yet been fleshed out and are
250     subject to almost certain change.
251 root 1.20
252     =item $w->trigger ($revents)
253    
254     Call the callback *now* with the given event mask.
255    
256 root 1.50 =item $previous_state = $w->keepalive ($bool)
257    
258     Normally, C<EV::loop> will return when there are no active watchers
259     (which is a "deadlock" because no progress can be made anymore). This is
260     convinient because it allows you to start your watchers (and your jobs),
261     call C<EV::loop> once and when it returns you know that all your jobs are
262     finished (or they forgot to register some watchers for their task :).
263    
264     Sometimes, however, this gets in your way, for example when you the module
265     that calls C<EV::loop> (usually the main program) is not the same module
266     as a long-living watcher (for example a DNS client module written by
267     somebody else even). Then you might want any outstanding requests to be
268     handled, but you would not want to keep C<EV::loop> from returning just
269     because you happen to have this long-running UDP port watcher.
270    
271     In this case you can clear the keepalive status, which means that even
272     though your watcher is active, it won't keep C<EV::loop> from returning.
273    
274     The initial value for keepalive is true (enabled), and you cna change it
275     any time.
276    
277     Example: Register an IO watcher for some UDP socket but do not keep the
278     event loop from running just because of that watcher.
279    
280     my $udp_socket = ...
281     my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... };
282     $udp_watcher->keepalive (0);
283 root 1.20
284 root 1.54 =back
285    
286    
287     =head2 WATCHER TYPES
288    
289     Each of the following subsections describes a single watcher type.
290    
291     =head3 IO WATCHERS - is this file descriptor readable or writable?
292    
293     =over 4
294    
295 root 1.20 =item $w = EV::io $fileno_or_fh, $eventmask, $callback
296 root 1.2
297 root 1.20 =item $w = EV::io_ns $fileno_or_fh, $eventmask, $callback
298 root 1.7
299 root 1.20 As long as the returned watcher object is alive, call the C<$callback>
300 root 1.54 when at least one of events specified in C<$eventmask> occurs.
301 root 1.2
302 root 1.20 The $eventmask can be one or more of these constants ORed together:
303 root 1.2
304     EV::READ wait until read() wouldn't block anymore
305     EV::WRITE wait until write() wouldn't block anymore
306 root 1.7
307 root 1.20 The C<io_ns> variant doesn't start (activate) the newly created watcher.
308 root 1.2
309 root 1.20 =item $w->set ($fileno_or_fh, $eventmask)
310 root 1.10
311 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be
312     called at any time.
313 root 1.10
314 root 1.20 =item $current_fh = $w->fh
315    
316     =item $old_fh = $w->fh ($new_fh)
317    
318     Returns the previously set filehandle and optionally set a new one.
319 root 1.10
320 root 1.20 =item $current_eventmask = $w->events
321    
322     =item $old_eventmask = $w->events ($new_eventmask)
323 root 1.10
324 root 1.20 Returns the previously set event mask and optionally set a new one.
325 root 1.10
326 root 1.54 =back
327    
328    
329     =head3 TIMER WATCHERS - relative and optionally repeating timeouts
330    
331     =over 4
332 root 1.10
333 root 1.20 =item $w = EV::timer $after, $repeat, $callback
334 root 1.2
335 root 1.20 =item $w = EV::timer_ns $after, $repeat, $callback
336 root 1.2
337 root 1.53 Calls the callback after C<$after> seconds (which may be fractional). If
338     C<$repeat> is non-zero, the timer will be restarted (with the $repeat
339     value as $after) after the callback returns.
340 root 1.2
341 root 1.20 This means that the callback would be called roughly after C<$after>
342 root 1.39 seconds, and then every C<$repeat> seconds. The timer does his best not
343     to drift, but it will not invoke the timer more often then once per event
344     loop iteration, and might drift in other cases. If that isn't acceptable,
345     look at EV::periodic, which can provide long-term stable timers.
346 root 1.2
347 root 1.39 The timer is based on a monotonic clock, that is, if somebody is sitting
348 root 1.20 in front of the machine while the timer is running and changes the system
349     clock, the timer will nevertheless run (roughly) the same time.
350 root 1.2
351 root 1.20 The C<timer_ns> variant doesn't start (activate) the newly created watcher.
352    
353     =item $w->set ($after, $repeat)
354    
355 root 1.54 Reconfigures the watcher, see the constructor above for details. Can be called at
356 root 1.20 any time.
357    
358     =item $w->again
359    
360     Similar to the C<start> method, but has special semantics for repeating timers:
361    
362 root 1.39 If the timer is active and non-repeating, it will be stopped.
363    
364 root 1.20 If the timer is active and repeating, reset the timeout to occur
365     C<$repeat> seconds after now.
366    
367 root 1.39 If the timer is inactive and repeating, start it using the repeat value.
368 root 1.20
369     Otherwise do nothing.
370    
371     This behaviour is useful when you have a timeout for some IO
372     operation. You create a timer object with the same value for C<$after> and
373     C<$repeat>, and then, in the read/write watcher, run the C<again> method
374     on the timeout.
375    
376 root 1.54 =back
377    
378    
379     =head3 PERIODIC WATCHERS - to cron or not to cron?
380    
381     =over 4
382 root 1.20
383 root 1.30 =item $w = EV::periodic $at, $interval, $reschedule_cb, $callback
384 root 1.20
385 root 1.30 =item $w = EV::periodic_ns $at, $interval, $reschedule_cb, $callback
386    
387     Similar to EV::timer, but is not based on relative timeouts but on
388     absolute times. Apart from creating "simple" timers that trigger "at" the
389     specified time, it can also be used for non-drifting absolute timers and
390     more complex, cron-like, setups that are not adversely affected by time
391     jumps (i.e. when the system clock is changed by explicit date -s or other
392     means such as ntpd). It is also the most complex watcher type in EV.
393    
394     It has three distinct "modes":
395    
396     =over 4
397 root 1.2
398 root 1.30 =item * absolute timer ($interval = $reschedule_cb = 0)
399 root 1.2
400 root 1.30 This time simply fires at the wallclock time C<$at> and doesn't repeat. It
401     will not adjust when a time jump occurs, that is, if it is to be run
402     at January 1st 2011 then it will run when the system time reaches or
403     surpasses this time.
404 root 1.2
405 root 1.30 =item * non-repeating interval timer ($interval > 0, $reschedule_cb = 0)
406 root 1.2
407 root 1.30 In this mode the watcher will always be scheduled to time out at the
408     next C<$at + N * $interval> time (for some integer N) and then repeat,
409     regardless of any time jumps.
410    
411     This can be used to create timers that do not drift with respect to system
412     time:
413    
414     my $hourly = EV::periodic 0, 3600, 0, sub { print "once/hour\n" };
415    
416     That doesn't mean there will always be 3600 seconds in between triggers,
417     but only that the the clalback will be called when the system time shows a
418     full hour (UTC).
419 root 1.2
420 root 1.7 Another way to think about it (for the mathematically inclined) is that
421 root 1.30 EV::periodic will try to run the callback in this mode at the next
422     possible time where C<$time = $at (mod $interval)>, regardless of any time
423     jumps.
424    
425     =item * manual reschedule mode ($reschedule_cb = coderef)
426    
427 root 1.37 In this mode $interval and $at are both being ignored. Instead, each
428     time the periodic watcher gets scheduled, the reschedule callback
429     ($reschedule_cb) will be called with the watcher as first, and the current
430     time as second argument.
431 root 1.30
432 root 1.31 I<This callback MUST NOT stop or destroy this or any other periodic
433     watcher, ever>. If you need to stop it, return 1e30 and stop it
434     afterwards.
435 root 1.30
436     It must return the next time to trigger, based on the passed time value
437     (that is, the lowest time value larger than to the second argument). It
438     will usually be called just before the callback will be triggered, but
439     might be called at other times, too.
440    
441     This can be used to create very complex timers, such as a timer that
442     triggers on each midnight, local time (actually 24 hours after the last
443     midnight, to keep the example simple. If you know a way to do it correctly
444     in about the same space (without requiring elaborate modules), drop me a
445     note :):
446    
447     my $daily = EV::periodic 0, 0, sub {
448     my ($w, $now) = @_;
449    
450     use Time::Local ();
451     my (undef, undef, undef, $d, $m, $y) = localtime $now;
452     86400 + Time::Local::timelocal 0, 0, 0, $d, $m, $y
453     }, sub {
454     print "it's midnight or likely shortly after, now\n";
455     };
456 root 1.7
457 root 1.30 =back
458 root 1.20
459     The C<periodic_ns> variant doesn't start (activate) the newly created watcher.
460 root 1.2
461 root 1.30 =item $w->set ($at, $interval, $reschedule_cb)
462 root 1.11
463 root 1.54 Reconfigures the watcher, see the constructor above for details. Can be called at
464 root 1.20 any time.
465    
466 root 1.30 =item $w->again
467    
468     Simply stops and starts the watcher again.
469    
470 root 1.54 =back
471    
472    
473     =head3 SIGNAL WATCHERS - signal me when a signal gets signalled!
474    
475     =over 4
476 root 1.20
477     =item $w = EV::signal $signal, $callback
478    
479     =item $w = EV::signal_ns $signal, $callback
480 root 1.11
481 root 1.54 Call the callback when $signal is received (the signal can be specified by
482     number or by name, just as with C<kill> or C<%SIG>).
483 root 1.2
484 root 1.11 EV will grab the signal for the process (the kernel only allows one
485 root 1.20 component to receive a signal at a time) when you start a signal watcher,
486     and removes it again when you stop it. Perl does the same when you
487 root 1.54 add/remove callbacks to C<%SIG>, so watch out.
488 root 1.20
489     You can have as many signal watchers per signal as you want.
490 root 1.2
491 root 1.20 The C<signal_ns> variant doesn't start (activate) the newly created watcher.
492 root 1.2
493 root 1.20 =item $w->set ($signal)
494 root 1.2
495 root 1.54 Reconfigures the watcher, see the constructor above for details. Can be
496     called at any time.
497 root 1.20
498 root 1.22 =item $current_signum = $w->signal
499    
500     =item $old_signum = $w->signal ($new_signal)
501    
502     Returns the previously set signal (always as a number not name) and
503     optionally set a new one.
504    
505 root 1.54 =back
506    
507    
508     =head3 CHILD WATCHERS - watch out for process status changes
509    
510     =over 4
511 root 1.20
512     =item $w = EV::child $pid, $callback
513    
514     =item $w = EV::child_ns $pid, $callback
515    
516 root 1.54 Call the callback when a status change for pid C<$pid> (or any pid if
517     C<$pid> is 0) has been received. More precisely: when the process receives
518     a C<SIGCHLD>, EV will fetch the outstanding exit/wait status for all
519 root 1.20 changed/zombie children and call the callback.
520    
521 root 1.54 It is valid (and fully supported) to install a child watcher after a child
522     has exited but before the event loop has started its next iteration (for
523     example, first you C<fork>, then the new child process might exit, and
524     only then do you install a child watcher in the parent for the new pid).
525    
526     You can access both exit (or tracing) status and pid by using the
527     C<rstatus> and C<rpid> methods on the watcher object.
528 root 1.20
529 root 1.54 You can have as many pid watchers per pid as you want, they will all be
530     called.
531 root 1.20
532     The C<child_ns> variant doesn't start (activate) the newly created watcher.
533    
534     =item $w->set ($pid)
535 root 1.1
536 root 1.54 Reconfigures the watcher, see the constructor above for details. Can be called at
537 root 1.20 any time.
538 root 1.2
539 root 1.22 =item $current_pid = $w->pid
540    
541     =item $old_pid = $w->pid ($new_pid)
542    
543     Returns the previously set process id and optionally set a new one.
544    
545 root 1.27 =item $exit_status = $w->rstatus
546    
547     Return the exit/wait status (as returned by waitpid, see the waitpid entry
548     in perlfunc).
549    
550     =item $pid = $w->rpid
551    
552     Return the pid of the awaited child (useful when you have installed a
553     watcher for all pids).
554    
555 root 1.54 =back
556    
557    
558 root 1.56 =head3 STAT WATCHERS - did the file attributes just change?
559    
560     =over 4
561    
562     =item $w = EV::stat $path, $interval, $callback
563    
564     =item $w = EV::stat_ns $path, $interval, $callback
565    
566     Call the callback when a file status change has been detected on
567     C<$path>. The C<$path> does not need to exist, changing from "path exists"
568     to "path does not exist" is a status change like any other.
569    
570     The C<$interval> is a recommended polling interval for systems where
571     OS-supported change notifications don't exist or are not supported. If
572     you use C<0> then an unspecified default is used (which is highly
573     recommended!), which is to be expected to be around five seconds usually.
574    
575     This watcher type is not meant for massive numbers of stat watchers,
576     as even with OS-supported change notifications, this can be
577     resource-intensive.
578    
579     The C<stat_ns> variant doesn't start (activate) the newly created watcher.
580    
581     =item $w->set ($path, $interval)
582    
583     Reconfigures the watcher, see the constructor above for details. Can be
584     called at any time.
585    
586     =item $current_path = $w->path
587    
588     =item $old_path = $w->path ($new_path)
589    
590     Returns the previously set path and optionally set a new one.
591    
592     =item $current_interval = $w->interval
593    
594     =item $old_interval = $w->interval ($new_interval)
595    
596     Returns the previously set interval and optionally set a new one. Can be
597     used to query the actual interval used.
598    
599     =back
600    
601    
602 root 1.54 =head3 IDLE WATCHERS - when you've got nothing better to do...
603    
604     =over 4
605 root 1.2
606 root 1.20 =item $w = EV::idle $callback
607 root 1.2
608 root 1.20 =item $w = EV::idle_ns $callback
609 root 1.2
610 root 1.20 Call the callback when there are no pending io, timer/periodic, signal or
611     child events, i.e. when the process is idle.
612 root 1.2
613 root 1.20 The process will not block as long as any idle watchers are active, and
614     they will be called repeatedly until stopped.
615 root 1.2
616 root 1.20 The C<idle_ns> variant doesn't start (activate) the newly created watcher.
617 root 1.2
618 root 1.54 =back
619    
620    
621     =head3 PREPARE WATCHERS - customise your event loop!
622    
623     =over 4
624 root 1.2
625 root 1.20 =item $w = EV::prepare $callback
626 root 1.1
627 root 1.20 =item $w = EV::prepare_ns $callback
628 root 1.1
629 root 1.20 Call the callback just before the process would block. You can still
630     create/modify any watchers at this point.
631 root 1.1
632 root 1.20 See the EV::check watcher, below, for explanations and an example.
633 root 1.2
634 root 1.20 The C<prepare_ns> variant doesn't start (activate) the newly created watcher.
635 root 1.2
636 root 1.54 =back
637    
638    
639     =head3 CHECK WATCHERS - customise your event loop even more!
640    
641     =over 4
642 root 1.2
643 root 1.20 =item $w = EV::check $callback
644 root 1.2
645 root 1.20 =item $w = EV::check_ns $callback
646 root 1.10
647 root 1.20 Call the callback just after the process wakes up again (after it has
648     gathered events), but before any other callbacks have been invoked.
649 root 1.10
650 root 1.20 This is used to integrate other event-based software into the EV
651     mainloop: You register a prepare callback and in there, you create io and
652     timer watchers as required by the other software. Here is a real-world
653     example of integrating Net::SNMP (with some details left out):
654 root 1.10
655 root 1.20 our @snmp_watcher;
656 root 1.2
657 root 1.20 our $snmp_prepare = EV::prepare sub {
658     # do nothing unless active
659     $dispatcher->{_event_queue_h}
660     or return;
661 root 1.2
662 root 1.20 # make the dispatcher handle any outstanding stuff
663 root 1.45 ... not shown
664 root 1.2
665 root 1.20 # create an IO watcher for each and every socket
666     @snmp_watcher = (
667     (map { EV::io $_, EV::READ, sub { } }
668     keys %{ $dispatcher->{_descriptors} }),
669 root 1.45
670     EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]
671     ? $event->[Net::SNMP::Dispatcher::_TIME] - EV::now : 0),
672     0, sub { },
673 root 1.20 );
674     };
675 root 1.2
676 root 1.45 The callbacks are irrelevant (and are not even being called), the
677     only purpose of those watchers is to wake up the process as soon as
678     one of those events occurs (socket readable, or timer timed out). The
679     corresponding EV::check watcher will then clean up:
680 root 1.2
681 root 1.20 our $snmp_check = EV::check sub {
682     # destroy all watchers
683     @snmp_watcher = ();
684 root 1.2
685 root 1.20 # make the dispatcher handle any new stuff
686 root 1.45 ... not shown
687 root 1.20 };
688 root 1.2
689 root 1.20 The callbacks of the created watchers will not be called as the watchers
690     are destroyed before this cna happen (remember EV::check gets called
691     first).
692 root 1.2
693 root 1.20 The C<check_ns> variant doesn't start (activate) the newly created watcher.
694 root 1.1
695     =back
696    
697 root 1.54
698 root 1.56 =head3 FORK WATCHERS - the audacity to resume the event loop after a fork
699 root 1.54
700 root 1.56 Fork watchers are called when a C<fork ()> was detected. The invocation
701     is done before the event loop blocks next and before C<check> watchers
702     are being called, and only in the child after the fork.
703 root 1.54
704 root 1.56 =over 4
705 root 1.54
706 root 1.56 =item $w = EV::fork $callback
707 root 1.54
708 root 1.56 =item $w = EV::fork_ns $callback
709 root 1.54
710 root 1.56 Call the callback before the event loop is resumed in the child process
711     after a fork.
712 root 1.54
713 root 1.56 The C<fork_ns> variant doesn't start (activate) the newly created watcher.
714 root 1.54
715     =back
716    
717    
718 root 1.13 =head1 THREADS
719    
720 root 1.45 Threads are not supported by this module in any way. Perl pseudo-threads
721 root 1.46 is evil stuff and must die. As soon as Perl gains real threads I will work
722     on thread support for it.
723    
724     =head1 FORK
725    
726     Most of the "improved" event delivering mechanisms of modern operating
727     systems have quite a few problems with fork(2) (to put it bluntly: it is
728     not supported and usually destructive). Libev makes it possible to work
729     around this by having a function that recreates the kernel state after
730     fork in the child.
731    
732     On non-win32 platforms, this module requires the pthread_atfork
733     functionality to do this automatically for you. This function is quite
734     buggy on most BSDs, though, so YMMV. The overhead for this is quite
735     negligible, because everything the function currently does is set a flag
736     that is checked only when the event loop gets used the next time, so when
737     you do fork but not use EV, the overhead is minimal.
738    
739     On win32, there is no notion of fork so all this doesn't apply, of course.
740 root 1.13
741 root 1.1 =cut
742    
743 root 1.8 our $DIED = sub {
744     warn "EV: error in callback (ignoring): $@";
745     };
746    
747 root 1.28 default_loop
748 root 1.26 or die 'EV: cannot initialise libev backend. bad $ENV{LIBEV_METHODS}?';
749 root 1.1
750     1;
751    
752 root 1.3 =head1 SEE ALSO
753    
754 root 1.54 L<EV::DNS>.
755 root 1.3
756 root 1.1 =head1 AUTHOR
757    
758     Marc Lehmann <schmorp@schmorp.de>
759     http://home.schmorp.de/
760    
761     =cut
762