ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/README
(Generate patch)

Comparing EV/README (file contents):
Revision 1.11 by root, Sat Nov 17 01:41:33 2007 UTC vs.
Revision 1.12 by root, Tue Nov 27 07:27:10 2007 UTC

46 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled 46 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled
47 EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block 47 EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block
48 48
49DESCRIPTION 49DESCRIPTION
50 This module provides an interface to libev 50 This module provides an interface to libev
51 (<http://software.schmorp.de/pkg/libev.html>). 51 (<http://software.schmorp.de/pkg/libev.html>). While the documentation
52 below is comprehensive, one might also consult the documentation of
53 libev itself (<http://cvs.schmorp.de/libev/ev.html>) for more subtle
54 details on watcher semantics or some discussion on the available
55 backends, or how to force a specific backend with "LIBEV_FLAGS".
52 56
53BASIC INTERFACE 57BASIC INTERFACE
54 $EV::DIED 58 $EV::DIED
55 Must contain a reference to a function that is called when a 59 Must contain a reference to a function that is called when a
56 callback throws an exception (with $@ containing thr error). The 60 callback throws an exception (with $@ containing thr error). The
84 When called with no arguments or an argument of EV::UNLOOP_ONE, 88 When called with no arguments or an argument of EV::UNLOOP_ONE,
85 makes the innermost call to EV::loop return. 89 makes the innermost call to EV::loop return.
86 90
87 When called with an argument of EV::UNLOOP_ALL, all calls to 91 When called with an argument of EV::UNLOOP_ALL, all calls to
88 EV::loop will return as fast as possible. 92 EV::loop will return as fast as possible.
93
94 EV::once $fh_or_undef, $events, $timeout, $cb->($revents)
95 This function rolls together an I/O and a timer watcher for a single
96 one-shot event without the need for managing a watcher object.
97
98 If $fh_or_undef is a filehandle or file descriptor, then $events
99 must be a bitset containing either "EV::READ", "EV::WRITE" or
100 "EV::READ | EV::WRITE", indicating the type of I/O event you want to
101 wait for. If you do not want to wait for some I/O event, specify
102 "undef" for $fh_or_undef and 0 for $events).
103
104 If timeout is "undef" or negative, then there will be no timeout.
105 Otherwise a EV::timer with this value will be started.
106
107 When an error occurs or either the timeout or I/O watcher triggers,
108 then the callback will be called with the received event set (in
109 general you can expect it to be a combination of "EV:ERROR",
110 "EV::READ", "EV::WRITE" and "EV::TIMEOUT").
111
112 EV::once doesn't return anything: the watchers stay active till
113 either of them triggers, then they will be stopped and freed, and
114 the callback invoked.
89 115
90 WATCHER 116 WATCHER
91 A watcher is an object that gets created to record your interest in some 117 A watcher is an object that gets created to record your interest in some
92 event. For instance, if you want to wait for STDIN to become readable, 118 event. For instance, if you want to wait for STDIN to become readable,
93 you would create an EV::io watcher for that: 119 you would create an EV::io watcher for that:
165 Pending watchers with higher priority will be invoked first. The 191 Pending watchers with higher priority will be invoked first. The
166 valid range of priorities lies between EV::MAXPRI (default 2) and 192 valid range of priorities lies between EV::MAXPRI (default 2) and
167 EV::MINPRI (default -2). If the priority is outside this range it 193 EV::MINPRI (default -2). If the priority is outside this range it
168 will automatically be normalised to the nearest valid priority. 194 will automatically be normalised to the nearest valid priority.
169 195
170 The default priority of any newly-created weatcher is 0. 196 The default priority of any newly-created watcher is 0.
197
198 Note that the priority semantics have not yet been fleshed out and
199 are subject to almost certain change.
171 200
172 $w->trigger ($revents) 201 $w->trigger ($revents)
173 Call the callback *now* with the given event mask. 202 Call the callback *now* with the given event mask.
203
204 $previous_state = $w->keepalive ($bool)
205 Normally, "EV::loop" will return when there are no active watchers
206 (which is a "deadlock" because no progress can be made anymore).
207 This is convinient because it allows you to start your watchers (and
208 your jobs), call "EV::loop" once and when it returns you know that
209 all your jobs are finished (or they forgot to register some watchers
210 for their task :).
211
212 Sometimes, however, this gets in your way, for example when you the
213 module that calls "EV::loop" (usually the main program) is not the
214 same module as a long-living watcher (for example a DNS client
215 module written by somebody else even). Then you might want any
216 outstanding requests to be handled, but you would not want to keep
217 "EV::loop" from returning just because you happen to have this
218 long-running UDP port watcher.
219
220 In this case you can clear the keepalive status, which means that
221 even though your watcher is active, it won't keep "EV::loop" from
222 returning.
223
224 The initial value for keepalive is true (enabled), and you cna
225 change it any time.
226
227 Example: Register an IO watcher for some UDP socket but do not keep
228 the event loop from running just because of that watcher.
229
230 my $udp_socket = ...
231 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... };
232 $udp_watcher->keepalive (0);
174 233
175 $w = EV::io $fileno_or_fh, $eventmask, $callback 234 $w = EV::io $fileno_or_fh, $eventmask, $callback
176 $w = EV::io_ns $fileno_or_fh, $eventmask, $callback 235 $w = EV::io_ns $fileno_or_fh, $eventmask, $callback
177 As long as the returned watcher object is alive, call the $callback 236 As long as the returned watcher object is alive, call the $callback
178 when the events specified in $eventmask. 237 when the events specified in $eventmask.
197 $old_eventmask = $w->events ($new_eventmask) 256 $old_eventmask = $w->events ($new_eventmask)
198 Returns the previously set event mask and optionally set a new one. 257 Returns the previously set event mask and optionally set a new one.
199 258
200 $w = EV::timer $after, $repeat, $callback 259 $w = EV::timer $after, $repeat, $callback
201 $w = EV::timer_ns $after, $repeat, $callback 260 $w = EV::timer_ns $after, $repeat, $callback
202 Calls the callback after $after seconds. If $repeat is non-zero, the 261 Calls the callback after $after seconds (which may be fractional).
203 timer will be restarted (with the $repeat value as $after) after the 262 If $repeat is non-zero, the timer will be restarted (with the
204 callback returns. 263 $repeat value as $after) after the callback returns.
205 264
206 This means that the callback would be called roughly after $after 265 This means that the callback would be called roughly after $after
207 seconds, and then every $repeat seconds. The timer does his best not 266 seconds, and then every $repeat seconds. The timer does his best not
208 to drift, but it will not invoke the timer more often then once per 267 to drift, but it will not invoke the timer more often then once per
209 event loop iteration, and might drift in other cases. If that isn't 268 event loop iteration, and might drift in other cases. If that isn't
414 # do nothing unless active 473 # do nothing unless active
415 $dispatcher->{_event_queue_h} 474 $dispatcher->{_event_queue_h}
416 or return; 475 or return;
417 476
418 # make the dispatcher handle any outstanding stuff 477 # make the dispatcher handle any outstanding stuff
478 ... not shown
419 479
420 # create an IO watcher for each and every socket 480 # create an IO watcher for each and every socket
421 @snmp_watcher = ( 481 @snmp_watcher = (
422 (map { EV::io $_, EV::READ, sub { } } 482 (map { EV::io $_, EV::READ, sub { } }
423 keys %{ $dispatcher->{_descriptors} }), 483 keys %{ $dispatcher->{_descriptors} }),
484
485 EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]
486 ? $event->[Net::SNMP::Dispatcher::_TIME] - EV::now : 0),
487 0, sub { },
424 ); 488 );
425
426 # if there are any timeouts, also create a timer
427 push @snmp_watcher, EV::timer $event->[Net::SNMP::Dispatcher::_TIME] - EV::now, 0, sub { }
428 if $event->[Net::SNMP::Dispatcher::_ACTIVE];
429 }; 489 };
430 490
431 The callbacks are irrelevant, the only purpose of those watchers is 491 The callbacks are irrelevant (and are not even being called), the
432 to wake up the process as soon as one of those events occurs (socket 492 only purpose of those watchers is to wake up the process as soon as
433 readable, or timer timed out). The corresponding EV::check watcher 493 one of those events occurs (socket readable, or timer timed out).
434 will then clean up: 494 The corresponding EV::check watcher will then clean up:
435 495
436 our $snmp_check = EV::check sub { 496 our $snmp_check = EV::check sub {
437 # destroy all watchers 497 # destroy all watchers
438 @snmp_watcher = (); 498 @snmp_watcher = ();
439 499
440 # make the dispatcher handle any new stuff 500 # make the dispatcher handle any new stuff
501 ... not shown
441 }; 502 };
442 503
443 The callbacks of the created watchers will not be called as the 504 The callbacks of the created watchers will not be called as the
444 watchers are destroyed before this cna happen (remember EV::check 505 watchers are destroyed before this cna happen (remember EV::check
445 gets called first). 506 gets called first).
446 507
447 The "check_ns" variant doesn't start (activate) the newly created 508 The "check_ns" variant doesn't start (activate) the newly created
448 watcher. 509 watcher.
449 510
450THREADS 511THREADS
451 Threads are not supported by this in any way. Perl pseudo-threads is 512 Threads are not supported by this module in any way. Perl pseudo-threads
452 evil stuff and must die. 513 is evil stuff and must die. As soon as Perl gains real threads I will
514 work on thread support for it.
515
516FORK
517 Most of the "improved" event delivering mechanisms of modern operating
518 systems have quite a few problems with fork(2) (to put it bluntly: it is
519 not supported and usually destructive). Libev makes it possible to work
520 around this by having a function that recreates the kernel state after
521 fork in the child.
522
523 On non-win32 platforms, this module requires the pthread_atfork
524 functionality to do this automatically for you. This function is quite
525 buggy on most BSDs, though, so YMMV. The overhead for this is quite
526 negligible, because everything the function currently does is set a flag
527 that is checked only when the event loop gets used the next time, so
528 when you do fork but not use EV, the overhead is minimal.
529
530 On win32, there is no notion of fork so all this doesn't apply, of
531 course.
453 532
454SEE ALSO 533SEE ALSO
455 L<EV::DNS>. 534 L<EV::DNS>.
456 535
457AUTHOR 536AUTHOR

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines