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

Comparing EV/EV.pm (file contents):
Revision 1.61 by root, Thu Dec 6 03:13:07 2007 UTC vs.
Revision 1.62 by root, Fri Dec 7 18:09:38 2007 UTC

58This module provides an interface to libev 58This module provides an interface to libev
59(L<http://software.schmorp.de/pkg/libev.html>). While the documentation 59(L<http://software.schmorp.de/pkg/libev.html>). While the documentation
60below is comprehensive, one might also consult the documentation of libev 60below is comprehensive, one might also consult the documentation of libev
61itself (L<http://cvs.schmorp.de/libev/ev.html>) for more subtle details on 61itself (L<http://cvs.schmorp.de/libev/ev.html>) for more subtle details on
62watcher semantics or some discussion on the available backends, or how to 62watcher semantics or some discussion on the available backends, or how to
63force a specific backend with C<LIBEV_FLAGS>. 63force a specific backend with C<LIBEV_FLAGS>, or just about in any case
64because it has much more detailed information.
64 65
65=cut 66=cut
66 67
67package EV; 68package EV;
68 69
69use strict; 70use strict;
70 71
71BEGIN { 72BEGIN {
72 our $VERSION = '1.6'; 73 our $VERSION = '1.7';
73 use XSLoader; 74 use XSLoader;
74 XSLoader::load "EV", $VERSION; 75 XSLoader::load "EV", $VERSION;
75} 76}
76 77
77@EV::IO::ISA = 78@EV::IO::ISA =
180events. 181events.
181 182
182Each watcher type has its associated bit in revents, so you can use the 183Each watcher type has its associated bit in revents, so you can use the
183same callback for multiple watchers. The event mask is named after the 184same callback for multiple watchers. The event mask is named after the
184type, i..e. EV::child sets EV::CHILD, EV::prepare sets EV::PREPARE, 185type, i..e. EV::child sets EV::CHILD, EV::prepare sets EV::PREPARE,
185EV::periodic sets EV::PERIODIC and so on, with the exception of IO events 186EV::periodic sets EV::PERIODIC and so on, with the exception of I/O events
186(which can set both EV::READ and EV::WRITE bits), and EV::timer (which 187(which can set both EV::READ and EV::WRITE bits), and EV::timer (which
187uses EV::TIMEOUT). 188uses EV::TIMEOUT).
188 189
189In the rare case where one wants to create a watcher but not start it at 190In the rare case where one wants to create a watcher but not start it at
190the same time, each constructor has a variant with a trailing C<_ns> in 191the same time, each constructor has a variant with a trailing C<_ns> in
212 213
213=item $w->stop 214=item $w->stop
214 215
215Stop a watcher if it is active. Also clear any pending events (events that 216Stop a watcher if it is active. Also clear any pending events (events that
216have been received but that didn't yet result in a callback invocation), 217have been received but that didn't yet result in a callback invocation),
217regardless of wether the watcher was active or not. 218regardless of whether the watcher was active or not.
218 219
219=item $bool = $w->is_active 220=item $bool = $w->is_active
220 221
221Returns true if the watcher is active, false otherwise. 222Returns true if the watcher is active, false otherwise.
222 223
277though your watcher is active, it won't keep C<EV::loop> from returning. 278though your watcher is active, it won't keep C<EV::loop> from returning.
278 279
279The initial value for keepalive is true (enabled), and you cna change it 280The initial value for keepalive is true (enabled), and you cna change it
280any time. 281any time.
281 282
282Example: Register an IO watcher for some UDP socket but do not keep the 283Example: Register an I/O watcher for some UDP socket but do not keep the
283event loop from running just because of that watcher. 284event loop from running just because of that watcher.
284 285
285 my $udp_socket = ... 286 my $udp_socket = ...
286 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... }; 287 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... };
287 $udp_watcher->keepalive (0); 288 $udp_watcher->keepalive (0);
291 292
292=head2 WATCHER TYPES 293=head2 WATCHER TYPES
293 294
294Each of the following subsections describes a single watcher type. 295Each of the following subsections describes a single watcher type.
295 296
296=head3 IO WATCHERS - is this file descriptor readable or writable? 297=head3 I/O WATCHERS - is this file descriptor readable or writable?
297 298
298=over 4 299=over 4
299 300
300=item $w = EV::io $fileno_or_fh, $eventmask, $callback 301=item $w = EV::io $fileno_or_fh, $eventmask, $callback
301 302
645 646
646=item $w = EV::idle $callback 647=item $w = EV::idle $callback
647 648
648=item $w = EV::idle_ns $callback 649=item $w = EV::idle_ns $callback
649 650
650Call the callback when there are no pending io, timer/periodic, signal or 651Call the callback when there are no other pending watchers of the same or
651child events, i.e. when the process is idle. 652higher priority (excluding check, prepare and other idle watchers of the
653same or lower priority, of course). They are called idle watchers because
654when the watcher is the highest priority pending event in the process, the
655process is considered to be idle at that priority.
656
657If you want a watcher that is only ever called when I<no> other events are
658outstanding you have to set the priority to C<EV::MINPRI>.
652 659
653The process will not block as long as any idle watchers are active, and 660The process will not block as long as any idle watchers are active, and
654they will be called repeatedly until stopped. 661they will be called repeatedly until stopped.
662
663For example, if you have idle watchers at priority C<0> and C<1>, and
664an I/O watcher at priority C<0>, then the idle watcher at priority C<1>
665and the I/O watcher will always run when ready. Only when the idle watcher
666at priority C<1> is stopped and the I/O watcher at priority C<0> is not
667pending with the C<0>-priority idle watcher be invoked.
655 668
656The C<idle_ns> variant doesn't start (activate) the newly created watcher. 669The C<idle_ns> variant doesn't start (activate) the newly created watcher.
657 670
658=back 671=back
659 672
700 or return; 713 or return;
701 714
702 # make the dispatcher handle any outstanding stuff 715 # make the dispatcher handle any outstanding stuff
703 ... not shown 716 ... not shown
704 717
705 # create an IO watcher for each and every socket 718 # create an I/O watcher for each and every socket
706 @snmp_watcher = ( 719 @snmp_watcher = (
707 (map { EV::io $_, EV::READ, sub { } } 720 (map { EV::io $_, EV::READ, sub { } }
708 keys %{ $dispatcher->{_descriptors} }), 721 keys %{ $dispatcher->{_descriptors} }),
709 722
710 EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE] 723 EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines