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

Comparing EV/EV.pm (file contents):
Revision 1.88 by root, Wed Apr 16 17:08:29 2008 UTC vs.
Revision 1.99 by root, Tue Jul 8 09:37:37 2008 UTC

2 2
3EV - perl interface to libev, a high performance full-featured event loop 3EV - perl interface to libev, a high performance full-featured event loop
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use EV; 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
8 39
9 # TIMERS 40 my $w = EV::child 666, 0, sub {
41 my ($w, $revents) = @_;
42 my $status = $w->rstatus;
43 };
10 44
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, 0, sub {
41 my ($w, $revents) = @_;
42 my $status = $w->rstatus;
43 };
44
45 # STAT CHANGES 45 # STAT CHANGES
46 my $w = EV::stat "/etc/passwd", 10, sub { 46 my $w = EV::stat "/etc/passwd", 10, sub {
47 my ($w, $revents) = @_; 47 my ($w, $revents) = @_;
48 warn $w->path, " has changed somehow.\n"; 48 warn $w->path, " has changed somehow.\n";
49 }; 49 };
50 50
51 # MAINLOOP 51 # MAINLOOP
52 EV::loop; # loop until EV::unloop is called or all watchers stop 52 EV::loop; # loop until EV::unloop is called or all watchers stop
53 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled 53 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled
54 EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block 54 EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block
55 55
56=head1 DESCRIPTION 56=head1 DESCRIPTION
57 57
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://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod>) for more
62watcher semantics or some discussion on the available backends, or how to 62subtle details on watcher semantics or some discussion on the available
63force a specific backend with C<LIBEV_FLAGS>, or just about in any case 63backends, or how to force a specific backend with C<LIBEV_FLAGS>, or just
64because it has much more detailed information. 64about in any case because it has much more detailed information.
65
66This module is very fast and scalable. It is actually so fast that you
67can use it through the L<AnyEvent> module, stay portable to other event
68loops (if you don't rely on any watcher types not available through it)
69and still be faster than with any other event loop currently supported in
70Perl.
65 71
66=cut 72=cut
67 73
68package EV; 74package EV;
69 75
70use strict; 76use strict;
71 77
72BEGIN { 78BEGIN {
73 our $VERSION = '3.3'; 79 our $VERSION = '3.42';
74 use XSLoader; 80 use XSLoader;
75 XSLoader::load "EV", $VERSION; 81 XSLoader::load "EV", $VERSION;
76} 82}
77 83
78@EV::IO::ISA = 84@EV::IO::ISA =
105default loop as this is fastest (perl-wise), best supported by other 111default loop as this is fastest (perl-wise), best supported by other
106modules (e.g. AnyEvent or Coro) and most portable event loop. 112modules (e.g. AnyEvent or Coro) and most portable event loop.
107 113
108For specific programs you can create additional event loops dynamically. 114For specific programs you can create additional event loops dynamically.
109 115
116If you want to take avdantage of kqueue (which often works properly for
117sockets only) even though the default loop doesn't enable it, you can
118I<embed> a kqueue loop into the default loop: running the default loop
119will then also service the kqueue loop to some extent. See the example in
120the section about embed watchers for an example on how to achieve that.
121
110=over 4 122=over 4
111 123
112=item $loop = new EV::loop [$flags] 124=item $loop = new EV::loop [$flags]
113 125
114Create a new event loop as per the specified flags. Please refer to the 126Create a new event loop as per the specified flags. Please refer to the
124 136
125=item $loop->loop_fork 137=item $loop->loop_fork
126 138
127Must be called after a fork in the child, before entering or continuing 139Must be called after a fork in the child, before entering or continuing
128the event loop. An alternative is to use C<EV::FLAG_FORKCHECK> which calls 140the event loop. An alternative is to use C<EV::FLAG_FORKCHECK> which calls
129this fucntion automatically, at some performance loss (refer to the libev 141this function automatically, at some performance loss (refer to the libev
130documentation). 142documentation).
131 143
144=item $loop->loop_verify
145
146Calls C<ev_verify> to make internal consistency checks (for debugging
147libev) and abort the program if any data structures were found to be
148corrupted.
149
132=item $loop = EV::default_loop [$flags] 150=item $loop = EV::default_loop [$flags]
133 151
134Return the default loop (which is a singleton object). 152Return the default loop (which is a singleton object). Since this module
153already creates the default loop with default flags, specifying flags here
154will not have any effect unless you destroy the default loop first, which
155isn't supported. So in short: don't do it, and if you break it, you get to
156keep the pieces.
135 157
136=back 158=back
137 159
138 160
139=head1 BASIC INTERFACE 161=head1 BASIC INTERFACE
269 291
270A watcher is an object that gets created to record your interest in some 292A watcher is an object that gets created to record your interest in some
271event. For instance, if you want to wait for STDIN to become readable, you 293event. For instance, if you want to wait for STDIN to become readable, you
272would create an EV::io watcher for that: 294would create an EV::io watcher for that:
273 295
274 my $watcher = EV::io *STDIN, EV::READ, sub { 296 my $watcher = EV::io *STDIN, EV::READ, sub {
275 my ($watcher, $revents) = @_; 297 my ($watcher, $revents) = @_;
276 warn "yeah, STDIN should now be readable without blocking!\n" 298 warn "yeah, STDIN should now be readable without blocking!\n"
277 }; 299 };
278 300
279All watchers can be active (waiting for events) or inactive (paused). Only 301All watchers can be active (waiting for events) or inactive (paused). Only
280active watchers will have their callbacks invoked. All callbacks will be 302active watchers will have their callbacks invoked. All callbacks will be
281called with at least two arguments: the watcher and a bitmask of received 303called with at least two arguments: the watcher and a bitmask of received
282events. 304events.
395Example: Register an I/O watcher for some UDP socket but do not keep the 417Example: Register an I/O watcher for some UDP socket but do not keep the
396event loop from running just because of that watcher. 418event loop from running just because of that watcher.
397 419
398 my $udp_socket = ... 420 my $udp_socket = ...
399 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... }; 421 my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... };
400 $1000udp_watcher->keepalive (0); 422 $udp_watcher->keepalive (0);
401 423
402=item $loop = $w->loop 424=item $loop = $w->loop
403 425
404Return the loop that this watcher is attached to. 426Return the loop that this watcher is attached to.
405 427
562time the periodic watcher gets scheduled, the reschedule callback 584time the periodic watcher gets scheduled, the reschedule callback
563($reschedule_cb) will be called with the watcher as first, and the current 585($reschedule_cb) will be called with the watcher as first, and the current
564time as second argument. 586time as second argument.
565 587
566I<This callback MUST NOT stop or destroy this or any other periodic 588I<This callback MUST NOT stop or destroy this or any other periodic
567watcher, ever>. If you need to stop it, return 1e30 and stop it 589watcher, ever, and MUST NOT call any event loop functions or methods>. If
568afterwards. 590you need to stop it, return 1e30 and stop it afterwards. You may create
591and start a C<EV::prepare> watcher for this task.
569 592
570It must return the next time to trigger, based on the passed time value 593It must return the next time to trigger, based on the passed time value
571(that is, the lowest time value larger than to the second argument). It 594(that is, the lowest time value larger than or equal to to the second
572will usually be called just before the callback will be triggered, but 595argument). It will usually be called just before the callback will be
573might be called at other times, too. 596triggered, but might be called at other times, too.
574 597
575This can be used to create very complex timers, such as a timer that 598This can be used to create very complex timers, such as a timer that
576triggers on each midnight, local time (actually 24 hours after the last 599triggers on each midnight, local time (actually 24 hours after the last
577midnight, to keep the example simple. If you know a way to do it correctly 600midnight, to keep the example simple. If you know a way to do it correctly
578in about the same space (without requiring elaborate modules), drop me a 601in about the same space (without requiring elaborate modules), drop me a
936for more details. 959for more details.
937 960
938In short, this watcher is most useful on BSD systems without working 961In short, this watcher is most useful on BSD systems without working
939kqueue to still be able to handle a large number of sockets: 962kqueue to still be able to handle a large number of sockets:
940 963
941 my $socket_loop; 964 my $socket_loop;
942 965
943 # check wether we use SELECT or POLL _and_ KQUEUE is supported 966 # check wether we use SELECT or POLL _and_ KQUEUE is supported
944 if ( 967 if (
945 (EV::backend & (EV::BACKEND_POLL | EV::BACKEND_SELECT)) 968 (EV::backend & (EV::BACKEND_POLL | EV::BACKEND_SELECT))
946 && (EV::supported_backends & EV::embeddable_backends & EV::BACKEND_KQUEUE) 969 && (EV::supported_backends & EV::embeddable_backends & EV::BACKEND_KQUEUE)
947 ) { 970 ) {
948 # use kqueue for sockets 971 # use kqueue for sockets
949 $socket_loop = new EV::Loop EV::BACKEND_KQUEUE | EV::FLAG_NOENV; 972 $socket_loop = new EV::Loop EV::BACKEND_KQUEUE | EV::FLAG_NOENV;
950 } 973 }
951 974
952 # use the default loop otherwise 975 # use the default loop otherwise
953 $socket_loop ||= EV::default_loop; 976 $socket_loop ||= EV::default_loop;
954 977
955=over 4 978=over 4
956 979
957=item $w = EV::embed $otherloop, $callback 980=item $w = EV::embed $otherloop, $callback
958 981
1049 1072
1050=head1 SEE ALSO 1073=head1 SEE ALSO
1051 1074
1052L<EV::ADNS> (asynchronous DNS), L<Glib::EV> (makes Glib/Gtk2 use EV as 1075L<EV::ADNS> (asynchronous DNS), L<Glib::EV> (makes Glib/Gtk2 use EV as
1053event loop), L<EV::Glib> (embed Glib into EV), L<Coro::EV> (efficient 1076event loop), L<EV::Glib> (embed Glib into EV), L<Coro::EV> (efficient
1054coroutines with EV), L<Net::SNMP::EV> (asynchronous SNMP). 1077coroutines with EV), L<Net::SNMP::EV> (asynchronous SNMP), L<AnyEvent> for
1078event-loop agnostic and portable event driven programming.
1055 1079
1056=head1 AUTHOR 1080=head1 AUTHOR
1057 1081
1058 Marc Lehmann <schmorp@schmorp.de> 1082 Marc Lehmann <schmorp@schmorp.de>
1059 http://home.schmorp.de/ 1083 http://home.schmorp.de/
1060 1084
1061=cut 1085=cut
1062 1086

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines