ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/README
Revision: 1.15
Committed: Wed Dec 5 14:06:50 2007 UTC (16 years, 5 months ago) by root
Branch: MAIN
CVS Tags: rel-1_6
Changes since 1.14: +6 -1 lines
Log Message:
*** empty log message ***

File Contents

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