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

Comparing EV/EV.pm (file contents):
Revision 1.57 by root, Wed Nov 28 17:32:24 2007 UTC vs.
Revision 1.63 by root, Fri Dec 7 18:11:21 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.4'; 73 our $VERSION = '1.71';
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 =
131innermost call to EV::loop return. 132innermost call to EV::loop return.
132 133
133When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as 134When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as
134fast as possible. 135fast as possible.
135 136
137=item $count = EV::loop_count
138
139Return the number of times the event loop has polled for new
140events. Sometiems useful as a generation counter.
141
136=item EV::once $fh_or_undef, $events, $timeout, $cb->($revents) 142=item EV::once $fh_or_undef, $events, $timeout, $cb->($revents)
137 143
138This function rolls together an I/O and a timer watcher for a single 144This function rolls together an I/O and a timer watcher for a single
139one-shot event without the need for managing a watcher object. 145one-shot event without the need for managing a watcher object.
140 146
175events. 181events.
176 182
177Each 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
178same callback for multiple watchers. The event mask is named after the 184same callback for multiple watchers. The event mask is named after the
179type, 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,
180EV::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
181(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
182uses EV::TIMEOUT). 188uses EV::TIMEOUT).
183 189
184In 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
185the 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
207 213
208=item $w->stop 214=item $w->stop
209 215
210Stop 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
211have 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),
212regardless of wether the watcher was active or not. 218regardless of whether the watcher was active or not.
213 219
214=item $bool = $w->is_active 220=item $bool = $w->is_active
215 221
216Returns true if the watcher is active, false otherwise. 222Returns true if the watcher is active, false otherwise.
217 223
272though 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.
273 279
274The 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
275any time. 281any time.
276 282
277Example: 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
278event loop from running just because of that watcher. 284event loop from running just because of that watcher.
279 285
280 my $udp_socket = ... 286 my $udp_socket = ...
281 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... }; 287 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... };
282 $udp_watcher->keepalive (0); 288 $udp_watcher->keepalive (0);
286 292
287=head2 WATCHER TYPES 293=head2 WATCHER TYPES
288 294
289Each of the following subsections describes a single watcher type. 295Each of the following subsections describes a single watcher type.
290 296
291=head3 IO WATCHERS - is this file descriptor readable or writable? 297=head3 I/O WATCHERS - is this file descriptor readable or writable?
292 298
293=over 4 299=over 4
294 300
295=item $w = EV::io $fileno_or_fh, $eventmask, $callback 301=item $w = EV::io $fileno_or_fh, $eventmask, $callback
296 302
640 646
641=item $w = EV::idle $callback 647=item $w = EV::idle $callback
642 648
643=item $w = EV::idle_ns $callback 649=item $w = EV::idle_ns $callback
644 650
645Call 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
646child 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>.
647 659
648The 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
649they 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.
650 668
651The 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.
652 670
653=back 671=back
654 672
695 or return; 713 or return;
696 714
697 # make the dispatcher handle any outstanding stuff 715 # make the dispatcher handle any outstanding stuff
698 ... not shown 716 ... not shown
699 717
700 # create an IO watcher for each and every socket 718 # create an I/O watcher for each and every socket
701 @snmp_watcher = ( 719 @snmp_watcher = (
702 (map { EV::io $_, EV::READ, sub { } } 720 (map { EV::io $_, EV::READ, sub { } }
703 keys %{ $dispatcher->{_descriptors} }), 721 keys %{ $dispatcher->{_descriptors} }),
704 722
705 EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE] 723 EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]
747 765
748The C<fork_ns> variant doesn't start (activate) the newly created watcher. 766The C<fork_ns> variant doesn't start (activate) the newly created watcher.
749 767
750=back 768=back
751 769
770
771=head1 PERL SIGNALS
772
773While Perl signal handling (C<%SIG>) is not affected by EV, the behaviour
774with EV is as the same as any other C library: Perl-signals will only be
775handled when Perl runs, which means your signal handler might be invoked
776only the next time an event callback is invoked.
777
778The solution is to use EV signal watchers (see C<EV::signal>), which will
779ensure proper operations with regards to other event watchers.
780
781If you cannot do this for whatever reason, you can also force a watcher
782to be called on every event loop iteration by installing a C<EV::check>
783watcher:
784
785 my $async_check = EV::check sub { };
786
787This ensures that perl shortly gets into control for a short time, and
788also ensures slower overall operation.
752 789
753=head1 THREADS 790=head1 THREADS
754 791
755Threads are not supported by this module in any way. Perl pseudo-threads 792Threads are not supported by this module in any way. Perl pseudo-threads
756is evil stuff and must die. As soon as Perl gains real threads I will work 793is evil stuff and must die. As soon as Perl gains real threads I will work
784 821
7851; 8221;
786 823
787=head1 SEE ALSO 824=head1 SEE ALSO
788 825
789L<EV::DNS>. 826L<EV::ADNS> (asynchronous dns), L<Glib::EV> (makes Glib/Gtk2 use EV as
827event loop), L<Coro::EV> (efficient coroutines with EV).
790 828
791=head1 AUTHOR 829=head1 AUTHOR
792 830
793 Marc Lehmann <schmorp@schmorp.de> 831 Marc Lehmann <schmorp@schmorp.de>
794 http://home.schmorp.de/ 832 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines