ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.pm
Revision: 1.47
Committed: Fri Nov 23 13:08:55 2007 UTC (16 years, 5 months ago) by root
Branch: MAIN
Changes since 1.46: +23 -0 lines
Log Message:
*** empty log message ***

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.11
45     # MAINLOOP
46 root 1.39 EV::loop; # loop until EV::unloop is called or all watchers stop
47 root 1.20 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled
48     EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block
49 root 1.2
50 root 1.1 =head1 DESCRIPTION
51    
52 root 1.16 This module provides an interface to libev
53 root 1.20 (L<http://software.schmorp.de/pkg/libev.html>).
54 root 1.1
55     =cut
56    
57     package EV;
58    
59     use strict;
60    
61     BEGIN {
62 root 1.44 our $VERSION = '1.2';
63 root 1.1 use XSLoader;
64     XSLoader::load "EV", $VERSION;
65     }
66    
67 root 1.18 @EV::Io::ISA =
68     @EV::Timer::ISA =
69     @EV::Periodic::ISA =
70     @EV::Signal::ISA =
71     @EV::Idle::ISA =
72     @EV::Prepare::ISA =
73     @EV::Check::ISA =
74 root 1.17 @EV::Child::ISA = "EV::Watcher";
75 root 1.15
76 root 1.8 =head1 BASIC INTERFACE
77 root 1.1
78     =over 4
79    
80 root 1.8 =item $EV::DIED
81    
82     Must contain a reference to a function that is called when a callback
83     throws an exception (with $@ containing thr error). The default prints an
84     informative message and continues.
85    
86     If this callback throws an exception it will be silently ignored.
87    
88 root 1.20 =item $time = EV::time
89    
90     Returns the current time in (fractional) seconds since the epoch.
91    
92 root 1.2 =item $time = EV::now
93    
94 root 1.20 Returns the time the last event loop iteration has been started. This
95     is the time that (relative) timers are based on, and refering to it is
96     usually faster then calling EV::time.
97    
98 root 1.41 =item $method = EV::method
99 root 1.20
100     Returns an integer describing the backend used by libev (EV::METHOD_SELECT
101     or EV::METHOD_EPOLL).
102    
103     =item EV::loop [$flags]
104 root 1.2
105 root 1.20 Begin checking for events and calling callbacks. It returns when a
106 root 1.39 callback calls EV::unloop.
107 root 1.2
108 root 1.20 The $flags argument can be one of the following:
109 root 1.2
110 root 1.20 0 as above
111     EV::LOOP_ONESHOT block at most once (wait, but do not loop)
112     EV::LOOP_NONBLOCK do not block at all (fetch/handle events but do not wait)
113 root 1.2
114 root 1.39 =item EV::unloop [$how]
115 root 1.2
116 root 1.39 When called with no arguments or an argument of EV::UNLOOP_ONE, makes the
117     innermost call to EV::loop return.
118 root 1.2
119 root 1.39 When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as
120 root 1.20 fast as possible.
121 root 1.2
122 root 1.47 =item EV::once $fh_or_undef, $events, $timeout, $cb->($events)
123    
124     This function rolls together an I/O and a timer watcher for a single
125     one-shot event without the need for managing a watcher object.
126    
127     If C<$fh_or_undef> is a filehandle or file descriptor, then C<$events>
128     must be a bitset containing either C<EV::READ>, C<EV::WRITE> or C<EV::READ
129     | EV::WRITE>, indicating the type of I/O event you want to wait for. If
130     you do not want to wait for some I/O event, specify C<undef> for
131     C<$fh_or_undef> and C<0> for C<$events>).
132    
133     If timeout is C<undef> or negative, then there will be no
134     timeout. Otherwise a EV::timer with this value will be started.
135    
136     When an error occurs or either the timeout or I/O watcher triggers, then
137     the callback will be called with the received event set (in general
138     you can expect it to be a combination of C<EV:ERROR>, C<EV::READ>,
139     C<EV::WRITE> and C<EV::TIMEOUT>).
140    
141     EV::once doesn't return anything: the watchers stay active till either
142     of them triggers, then they will be stopped and freed, and the callback
143     invoked.
144    
145 root 1.20 =back
146    
147     =head2 WATCHER
148 root 1.2
149 root 1.20 A watcher is an object that gets created to record your interest in some
150     event. For instance, if you want to wait for STDIN to become readable, you
151     would create an EV::io watcher for that:
152    
153     my $watcher = EV::io *STDIN, EV::READ, sub {
154     my ($watcher, $revents) = @_;
155     warn "yeah, STDIN should not be readable without blocking!\n"
156     };
157 root 1.2
158 root 1.20 All watchers can be active (waiting for events) or inactive (paused). Only
159     active watchers will have their callbacks invoked. All callbacks will be
160     called with at least two arguments: the watcher and a bitmask of received
161     events.
162    
163     Each watcher type has its associated bit in revents, so you can use the
164     same callback for multiple watchers. The event mask is named after the
165     type, i..e. EV::child sets EV::CHILD, EV::prepare sets EV::PREPARE,
166     EV::periodic sets EV::PERIODIC and so on, with the exception of IO events
167     (which can set both EV::READ and EV::WRITE bits), and EV::timer (which
168     uses EV::TIMEOUT).
169    
170     In the rare case where one wants to create a watcher but not start it at
171     the same time, each constructor has a variant with a trailing C<_ns> in
172     its name, e.g. EV::io has a non-starting variant EV::io_ns and so on.
173    
174     Please note that a watcher will automatically be stopped when the watcher
175 root 1.23 object is destroyed, so you I<need> to keep the watcher objects returned by
176 root 1.20 the constructors.
177    
178 root 1.23 Also, all methods changing some aspect of a watcher (->set, ->priority,
179     ->fh and so on) automatically stop and start it again if it is active,
180     which means pending events get lost.
181    
182 root 1.20 =head2 WATCHER TYPES
183    
184     Now lets move to the existing watcher types and asociated methods.
185    
186     The following methods are available for all watchers. Then followes a
187     description of each watcher constructor (EV::io, EV::timer, EV::periodic,
188     EV::signal, EV::child, EV::idle, EV::prepare and EV::check), followed by
189     any type-specific methods (if any).
190    
191     =over 4
192 root 1.2
193 root 1.20 =item $w->start
194    
195     Starts a watcher if it isn't active already. Does nothing to an already
196     active watcher. By default, all watchers start out in the active state
197     (see the description of the C<_ns> variants if you need stopped watchers).
198    
199     =item $w->stop
200 root 1.2
201 root 1.20 Stop a watcher if it is active. Also clear any pending events (events that
202     have been received but that didn't yet result in a callback invocation),
203     regardless of wether the watcher was active or not.
204 root 1.2
205 root 1.20 =item $bool = $w->is_active
206 root 1.2
207 root 1.20 Returns true if the watcher is active, false otherwise.
208    
209 root 1.30 =item $current_data = $w->data
210    
211     =item $old_data = $w->data ($new_data)
212    
213     Queries a freely usable data scalar on the watcher and optionally changes
214     it. This is a way to associate custom data with a watcher:
215    
216     my $w = EV::timer 60, 0, sub {
217     warn $_[0]->data;
218     };
219     $w->data ("print me!");
220    
221 root 1.20 =item $current_cb = $w->cb
222    
223     =item $old_cb = $w->cb ($new_cb)
224    
225 root 1.23 Queries the callback on the watcher and optionally changes it. You can do
226     this at any time without the watcher restarting.
227    
228     =item $current_priority = $w->priority
229    
230     =item $old_priority = $w->priority ($new_priority)
231    
232     Queries the priority on the watcher and optionally changes it. Pending
233     watchers with higher priority will be invoked first. The valid range of
234 root 1.24 priorities lies between EV::MAXPRI (default 2) and EV::MINPRI (default
235     -2). If the priority is outside this range it will automatically be
236 root 1.23 normalised to the nearest valid priority.
237    
238     The default priority of any newly-created weatcher is 0.
239 root 1.20
240     =item $w->trigger ($revents)
241    
242     Call the callback *now* with the given event mask.
243    
244    
245     =item $w = EV::io $fileno_or_fh, $eventmask, $callback
246 root 1.2
247 root 1.20 =item $w = EV::io_ns $fileno_or_fh, $eventmask, $callback
248 root 1.7
249 root 1.20 As long as the returned watcher object is alive, call the C<$callback>
250     when the events specified in C<$eventmask>.
251 root 1.2
252 root 1.20 The $eventmask can be one or more of these constants ORed together:
253 root 1.2
254     EV::READ wait until read() wouldn't block anymore
255     EV::WRITE wait until write() wouldn't block anymore
256 root 1.7
257 root 1.20 The C<io_ns> variant doesn't start (activate) the newly created watcher.
258 root 1.2
259 root 1.20 =item $w->set ($fileno_or_fh, $eventmask)
260 root 1.10
261 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be
262     called at any time.
263 root 1.10
264 root 1.20 =item $current_fh = $w->fh
265    
266     =item $old_fh = $w->fh ($new_fh)
267    
268     Returns the previously set filehandle and optionally set a new one.
269 root 1.10
270 root 1.20 =item $current_eventmask = $w->events
271    
272     =item $old_eventmask = $w->events ($new_eventmask)
273 root 1.10
274 root 1.20 Returns the previously set event mask and optionally set a new one.
275 root 1.10
276    
277 root 1.20 =item $w = EV::timer $after, $repeat, $callback
278 root 1.2
279 root 1.20 =item $w = EV::timer_ns $after, $repeat, $callback
280 root 1.2
281 root 1.20 Calls the callback after C<$after> seconds. If C<$repeat> is non-zero,
282     the timer will be restarted (with the $repeat value as $after) after the
283     callback returns.
284 root 1.2
285 root 1.20 This means that the callback would be called roughly after C<$after>
286 root 1.39 seconds, and then every C<$repeat> seconds. The timer does his best not
287     to drift, but it will not invoke the timer more often then once per event
288     loop iteration, and might drift in other cases. If that isn't acceptable,
289     look at EV::periodic, which can provide long-term stable timers.
290 root 1.2
291 root 1.39 The timer is based on a monotonic clock, that is, if somebody is sitting
292 root 1.20 in front of the machine while the timer is running and changes the system
293     clock, the timer will nevertheless run (roughly) the same time.
294 root 1.2
295 root 1.20 The C<timer_ns> variant doesn't start (activate) the newly created watcher.
296    
297     =item $w->set ($after, $repeat)
298    
299     Reconfigures the watcher, see the constructor above for details. Can be at
300     any time.
301    
302     =item $w->again
303    
304     Similar to the C<start> method, but has special semantics for repeating timers:
305    
306 root 1.39 If the timer is active and non-repeating, it will be stopped.
307    
308 root 1.20 If the timer is active and repeating, reset the timeout to occur
309     C<$repeat> seconds after now.
310    
311 root 1.39 If the timer is inactive and repeating, start it using the repeat value.
312 root 1.20
313     Otherwise do nothing.
314    
315     This behaviour is useful when you have a timeout for some IO
316     operation. You create a timer object with the same value for C<$after> and
317     C<$repeat>, and then, in the read/write watcher, run the C<again> method
318     on the timeout.
319    
320    
321 root 1.30 =item $w = EV::periodic $at, $interval, $reschedule_cb, $callback
322 root 1.20
323 root 1.30 =item $w = EV::periodic_ns $at, $interval, $reschedule_cb, $callback
324    
325     Similar to EV::timer, but is not based on relative timeouts but on
326     absolute times. Apart from creating "simple" timers that trigger "at" the
327     specified time, it can also be used for non-drifting absolute timers and
328     more complex, cron-like, setups that are not adversely affected by time
329     jumps (i.e. when the system clock is changed by explicit date -s or other
330     means such as ntpd). It is also the most complex watcher type in EV.
331    
332     It has three distinct "modes":
333    
334     =over 4
335 root 1.2
336 root 1.30 =item * absolute timer ($interval = $reschedule_cb = 0)
337 root 1.2
338 root 1.30 This time simply fires at the wallclock time C<$at> and doesn't repeat. It
339     will not adjust when a time jump occurs, that is, if it is to be run
340     at January 1st 2011 then it will run when the system time reaches or
341     surpasses this time.
342 root 1.2
343 root 1.30 =item * non-repeating interval timer ($interval > 0, $reschedule_cb = 0)
344 root 1.2
345 root 1.30 In this mode the watcher will always be scheduled to time out at the
346     next C<$at + N * $interval> time (for some integer N) and then repeat,
347     regardless of any time jumps.
348    
349     This can be used to create timers that do not drift with respect to system
350     time:
351    
352     my $hourly = EV::periodic 0, 3600, 0, sub { print "once/hour\n" };
353    
354     That doesn't mean there will always be 3600 seconds in between triggers,
355     but only that the the clalback will be called when the system time shows a
356     full hour (UTC).
357 root 1.2
358 root 1.7 Another way to think about it (for the mathematically inclined) is that
359 root 1.30 EV::periodic will try to run the callback in this mode at the next
360     possible time where C<$time = $at (mod $interval)>, regardless of any time
361     jumps.
362    
363     =item * manual reschedule mode ($reschedule_cb = coderef)
364    
365 root 1.37 In this mode $interval and $at are both being ignored. Instead, each
366     time the periodic watcher gets scheduled, the reschedule callback
367     ($reschedule_cb) will be called with the watcher as first, and the current
368     time as second argument.
369 root 1.30
370 root 1.31 I<This callback MUST NOT stop or destroy this or any other periodic
371     watcher, ever>. If you need to stop it, return 1e30 and stop it
372     afterwards.
373 root 1.30
374     It must return the next time to trigger, based on the passed time value
375     (that is, the lowest time value larger than to the second argument). It
376     will usually be called just before the callback will be triggered, but
377     might be called at other times, too.
378    
379     This can be used to create very complex timers, such as a timer that
380     triggers on each midnight, local time (actually 24 hours after the last
381     midnight, to keep the example simple. If you know a way to do it correctly
382     in about the same space (without requiring elaborate modules), drop me a
383     note :):
384    
385     my $daily = EV::periodic 0, 0, sub {
386     my ($w, $now) = @_;
387    
388     use Time::Local ();
389     my (undef, undef, undef, $d, $m, $y) = localtime $now;
390     86400 + Time::Local::timelocal 0, 0, 0, $d, $m, $y
391     }, sub {
392     print "it's midnight or likely shortly after, now\n";
393     };
394 root 1.7
395 root 1.30 =back
396 root 1.20
397     The C<periodic_ns> variant doesn't start (activate) the newly created watcher.
398 root 1.2
399 root 1.30 =item $w->set ($at, $interval, $reschedule_cb)
400 root 1.11
401 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be at
402     any time.
403    
404 root 1.30 =item $w->again
405    
406     Simply stops and starts the watcher again.
407    
408 root 1.20
409     =item $w = EV::signal $signal, $callback
410    
411     =item $w = EV::signal_ns $signal, $callback
412 root 1.11
413     Call the callback when $signal is received (the signal can be specified
414 root 1.20 by number or by name, just as with kill or %SIG).
415 root 1.2
416 root 1.11 EV will grab the signal for the process (the kernel only allows one
417 root 1.20 component to receive a signal at a time) when you start a signal watcher,
418     and removes it again when you stop it. Perl does the same when you
419     add/remove callbacks to %SIG, so watch out.
420    
421     You can have as many signal watchers per signal as you want.
422 root 1.2
423 root 1.20 The C<signal_ns> variant doesn't start (activate) the newly created watcher.
424 root 1.2
425 root 1.20 =item $w->set ($signal)
426 root 1.2
427 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be at
428     any time.
429    
430 root 1.22 =item $current_signum = $w->signal
431    
432     =item $old_signum = $w->signal ($new_signal)
433    
434     Returns the previously set signal (always as a number not name) and
435     optionally set a new one.
436    
437 root 1.20
438     =item $w = EV::child $pid, $callback
439    
440     =item $w = EV::child_ns $pid, $callback
441    
442     Call the callback when a status change for pid C<$pid> (or any pid
443     if C<$pid> is 0) has been received. More precisely: when the process
444     receives a SIGCHLD, EV will fetch the outstanding exit/wait status for all
445     changed/zombie children and call the callback.
446    
447 root 1.27 You can access both status and pid by using the C<rstatus> and C<rpid>
448     methods on the watcher object.
449 root 1.20
450     You can have as many pid watchers per pid as you want.
451    
452     The C<child_ns> variant doesn't start (activate) the newly created watcher.
453    
454     =item $w->set ($pid)
455 root 1.1
456 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be at
457     any time.
458 root 1.2
459 root 1.22 =item $current_pid = $w->pid
460    
461     =item $old_pid = $w->pid ($new_pid)
462    
463     Returns the previously set process id and optionally set a new one.
464    
465 root 1.27 =item $exit_status = $w->rstatus
466    
467     Return the exit/wait status (as returned by waitpid, see the waitpid entry
468     in perlfunc).
469    
470     =item $pid = $w->rpid
471    
472     Return the pid of the awaited child (useful when you have installed a
473     watcher for all pids).
474    
475 root 1.2
476 root 1.20 =item $w = EV::idle $callback
477 root 1.2
478 root 1.20 =item $w = EV::idle_ns $callback
479 root 1.2
480 root 1.20 Call the callback when there are no pending io, timer/periodic, signal or
481     child events, i.e. when the process is idle.
482 root 1.2
483 root 1.20 The process will not block as long as any idle watchers are active, and
484     they will be called repeatedly until stopped.
485 root 1.2
486 root 1.20 The C<idle_ns> variant doesn't start (activate) the newly created watcher.
487 root 1.2
488    
489 root 1.20 =item $w = EV::prepare $callback
490 root 1.1
491 root 1.20 =item $w = EV::prepare_ns $callback
492 root 1.1
493 root 1.20 Call the callback just before the process would block. You can still
494     create/modify any watchers at this point.
495 root 1.1
496 root 1.20 See the EV::check watcher, below, for explanations and an example.
497 root 1.2
498 root 1.20 The C<prepare_ns> variant doesn't start (activate) the newly created watcher.
499 root 1.2
500    
501 root 1.20 =item $w = EV::check $callback
502 root 1.2
503 root 1.20 =item $w = EV::check_ns $callback
504 root 1.10
505 root 1.20 Call the callback just after the process wakes up again (after it has
506     gathered events), but before any other callbacks have been invoked.
507 root 1.10
508 root 1.20 This is used to integrate other event-based software into the EV
509     mainloop: You register a prepare callback and in there, you create io and
510     timer watchers as required by the other software. Here is a real-world
511     example of integrating Net::SNMP (with some details left out):
512 root 1.10
513 root 1.20 our @snmp_watcher;
514 root 1.2
515 root 1.20 our $snmp_prepare = EV::prepare sub {
516     # do nothing unless active
517     $dispatcher->{_event_queue_h}
518     or return;
519 root 1.2
520 root 1.20 # make the dispatcher handle any outstanding stuff
521 root 1.45 ... not shown
522 root 1.2
523 root 1.20 # create an IO watcher for each and every socket
524     @snmp_watcher = (
525     (map { EV::io $_, EV::READ, sub { } }
526     keys %{ $dispatcher->{_descriptors} }),
527 root 1.45
528     EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]
529     ? $event->[Net::SNMP::Dispatcher::_TIME] - EV::now : 0),
530     0, sub { },
531 root 1.20 );
532     };
533 root 1.2
534 root 1.45 The callbacks are irrelevant (and are not even being called), the
535     only purpose of those watchers is to wake up the process as soon as
536     one of those events occurs (socket readable, or timer timed out). The
537     corresponding EV::check watcher will then clean up:
538 root 1.2
539 root 1.20 our $snmp_check = EV::check sub {
540     # destroy all watchers
541     @snmp_watcher = ();
542 root 1.2
543 root 1.20 # make the dispatcher handle any new stuff
544 root 1.45 ... not shown
545 root 1.20 };
546 root 1.2
547 root 1.20 The callbacks of the created watchers will not be called as the watchers
548     are destroyed before this cna happen (remember EV::check gets called
549     first).
550 root 1.2
551 root 1.20 The C<check_ns> variant doesn't start (activate) the newly created watcher.
552 root 1.1
553     =back
554    
555 root 1.13 =head1 THREADS
556    
557 root 1.45 Threads are not supported by this module in any way. Perl pseudo-threads
558 root 1.46 is evil stuff and must die. As soon as Perl gains real threads I will work
559     on thread support for it.
560    
561     =head1 FORK
562    
563     Most of the "improved" event delivering mechanisms of modern operating
564     systems have quite a few problems with fork(2) (to put it bluntly: it is
565     not supported and usually destructive). Libev makes it possible to work
566     around this by having a function that recreates the kernel state after
567     fork in the child.
568    
569     On non-win32 platforms, this module requires the pthread_atfork
570     functionality to do this automatically for you. This function is quite
571     buggy on most BSDs, though, so YMMV. The overhead for this is quite
572     negligible, because everything the function currently does is set a flag
573     that is checked only when the event loop gets used the next time, so when
574     you do fork but not use EV, the overhead is minimal.
575    
576     On win32, there is no notion of fork so all this doesn't apply, of course.
577 root 1.13
578 root 1.1 =cut
579    
580 root 1.8 our $DIED = sub {
581     warn "EV: error in callback (ignoring): $@";
582     };
583    
584 root 1.28 default_loop
585 root 1.26 or die 'EV: cannot initialise libev backend. bad $ENV{LIBEV_METHODS}?';
586 root 1.1
587     1;
588    
589 root 1.3 =head1 SEE ALSO
590    
591 root 1.40 L<EV::DNS>.
592 root 1.3
593 root 1.1 =head1 AUTHOR
594    
595     Marc Lehmann <schmorp@schmorp.de>
596     http://home.schmorp.de/
597    
598     =cut
599