ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.pm
Revision: 1.42
Committed: Sat Nov 17 01:41:33 2007 UTC (16 years, 6 months ago) by root
Branch: MAIN
Changes since 1.41: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

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