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

Comparing AnyEvent/lib/AnyEvent.pm (file contents):
Revision 1.402 by root, Mon Apr 9 02:25:48 2012 UTC vs.
Revision 1.413 by root, Tue Jul 30 23:14:32 2013 UTC

271 271
272Example 2: fire an event after 0.5 seconds, then roughly every second. 272Example 2: fire an event after 0.5 seconds, then roughly every second.
273 273
274 my $w = AnyEvent->timer (after => 0.5, interval => 1, cb => sub { 274 my $w = AnyEvent->timer (after => 0.5, interval => 1, cb => sub {
275 warn "timeout\n"; 275 warn "timeout\n";
276 }; 276 });
277 277
278=head3 TIMING ISSUES 278=head3 TIMING ISSUES
279 279
280There are two ways to handle timers: based on real time (relative, "fire 280There are two ways to handle timers: based on real time (relative, "fire
281in 10 seconds") and based on wallclock time (absolute, "fire at 12 281in 10 seconds") and based on wallclock time (absolute, "fire at 12
763 }; 763 };
764 } 764 }
765 765
766 $cv->end; 766 $cv->end;
767 767
768 ...
769
770 my $results = $cv->recv;
771
768This code fragment supposedly pings a number of hosts and calls 772This code fragment supposedly pings a number of hosts and calls
769C<send> after results for all then have have been gathered - in any 773C<send> after results for all then have have been gathered - in any
770order. To achieve this, the code issues a call to C<begin> when it starts 774order. To achieve this, the code issues a call to C<begin> when it starts
771each ping request and calls C<end> when it has received some result for 775each ping request and calls C<end> when it has received some result for
772it. Since C<begin> and C<end> only maintain a counter, the order in which 776it. Since C<begin> and C<end> only maintain a counter, the order in which
807 811
808In list context, all parameters passed to C<send> will be returned, 812In list context, all parameters passed to C<send> will be returned,
809in scalar context only the first one will be returned. 813in scalar context only the first one will be returned.
810 814
811Note that doing a blocking wait in a callback is not supported by any 815Note that doing a blocking wait in a callback is not supported by any
812event loop, that is, recursive invocation of a blocking C<< ->recv 816event loop, that is, recursive invocation of a blocking C<< ->recv >> is
813>> is not allowed, and the C<recv> call will C<croak> if such a 817not allowed and the C<recv> call will C<croak> if such a condition is
814condition is detected. This condition can be slightly loosened by using 818detected. This requirement can be dropped by relying on L<Coro::AnyEvent>
815L<Coro::AnyEvent>, which allows you to do a blocking C<< ->recv >> from 819, which allows you to do a blocking C<< ->recv >> from any thread
816any thread that doesn't run the event loop itself. 820that doesn't run the event loop itself. L<Coro::AnyEvent> is loaded
821automatically when L<Coro> is used with L<AnyEvent>, so code does not need
822to do anything special to take advantage of that: any code that would
823normally block your program because it calls C<recv>, be executed in an
824C<async> thread instead without blocking other threads.
817 825
818Not all event models support a blocking wait - some die in that case 826Not all event models support a blocking wait - some die in that case
819(programs might want to do that to stay interactive), so I<if you are 827(programs might want to do that to stay interactive), so I<if you are
820using this from a module, never require a blocking wait>. Instead, let the 828using this from a module, never require a blocking wait>. Instead, let the
821caller decide whether the call will block or not (for example, by coupling 829caller decide whether the call will block or not (for example, by coupling
1139a longer non-exhaustive list), and the list is heavily biased towards 1147a longer non-exhaustive list), and the list is heavily biased towards
1140modules of the AnyEvent author himself :) 1148modules of the AnyEvent author himself :)
1141 1149
1142=over 4 1150=over 4
1143 1151
1144=item L<AnyEvent::Util> 1152=item L<AnyEvent::Util> (part of the AnyEvent distribution)
1145 1153
1146Contains various utility functions that replace often-used blocking 1154Contains various utility functions that replace often-used blocking
1147functions such as C<inet_aton> with event/callback-based versions. 1155functions such as C<inet_aton> with event/callback-based versions.
1148 1156
1149=item L<AnyEvent::Socket> 1157=item L<AnyEvent::Socket> (part of the AnyEvent distribution)
1150 1158
1151Provides various utility functions for (internet protocol) sockets, 1159Provides various utility functions for (internet protocol) sockets,
1152addresses and name resolution. Also functions to create non-blocking tcp 1160addresses and name resolution. Also functions to create non-blocking tcp
1153connections or tcp servers, with IPv6 and SRV record support and more. 1161connections or tcp servers, with IPv6 and SRV record support and more.
1154 1162
1155=item L<AnyEvent::Handle> 1163=item L<AnyEvent::Handle> (part of the AnyEvent distribution)
1156 1164
1157Provide read and write buffers, manages watchers for reads and writes, 1165Provide read and write buffers, manages watchers for reads and writes,
1158supports raw and formatted I/O, I/O queued and fully transparent and 1166supports raw and formatted I/O, I/O queued and fully transparent and
1159non-blocking SSL/TLS (via L<AnyEvent::TLS>). 1167non-blocking SSL/TLS (via L<AnyEvent::TLS>).
1160 1168
1161=item L<AnyEvent::DNS> 1169=item L<AnyEvent::DNS> (part of the AnyEvent distribution)
1162 1170
1163Provides rich asynchronous DNS resolver capabilities. 1171Provides rich asynchronous DNS resolver capabilities.
1164 1172
1165=item L<AnyEvent::HTTP>, L<AnyEvent::IRC>, L<AnyEvent::XMPP>, L<AnyEvent::GPSD>, L<AnyEvent::IGS>, L<AnyEvent::FCP> 1173=item L<AnyEvent::HTTP>, L<AnyEvent::IRC>, L<AnyEvent::XMPP>, L<AnyEvent::GPSD>, L<AnyEvent::IGS>, L<AnyEvent::FCP>
1166 1174
1167Implement event-based interfaces to the protocols of the same name (for 1175Implement event-based interfaces to the protocols of the same name (for
1168the curious, IGS is the International Go Server and FCP is the Freenet 1176the curious, IGS is the International Go Server and FCP is the Freenet
1169Client Protocol). 1177Client Protocol).
1170 1178
1171=item L<AnyEvent::AIO> 1179=item L<AnyEvent::AIO> (part of the AnyEvent distribution)
1172 1180
1173Truly asynchronous (as opposed to non-blocking) I/O, should be in the 1181Truly asynchronous (as opposed to non-blocking) I/O, should be in the
1174toolbox of every event programmer. AnyEvent::AIO transparently fuses 1182toolbox of every event programmer. AnyEvent::AIO transparently fuses
1175L<IO::AIO> and AnyEvent together, giving AnyEvent access to event-based 1183L<IO::AIO> and AnyEvent together, giving AnyEvent access to event-based
1176file I/O, and much more. 1184file I/O, and much more.
1221 1229
1222=cut 1230=cut
1223 1231
1224package AnyEvent; 1232package AnyEvent;
1225 1233
1226# basically a tuned-down version of common::sense 1234BEGIN {
1227sub common_sense { 1235 require "AnyEvent/constants.pl";
1228 # from common:.sense 3.5 1236 &AnyEvent::common_sense;
1229 local $^W;
1230 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00";
1231 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl)
1232 $^H |= 0x00000600;
1233} 1237}
1234
1235BEGIN { AnyEvent::common_sense }
1236 1238
1237use Carp (); 1239use Carp ();
1238 1240
1239our $VERSION = '6.14'; 1241our $VERSION = '7.04';
1240our $MODEL; 1242our $MODEL;
1241our @ISA; 1243our @ISA;
1242our @REGISTRY; 1244our @REGISTRY;
1243our $VERBOSE; 1245our $VERBOSE;
1244our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred 1246our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred
1245our $MAX_SIGNAL_LATENCY = $ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY} || 10; # executes after the BEGIN block below (tainting!) 1247our $MAX_SIGNAL_LATENCY = $ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY} || 10; # executes after the BEGIN block below (tainting!)
1246 1248
1247BEGIN { 1249BEGIN {
1248 require "AnyEvent/constants.pl";
1249
1250 eval "sub TAINT (){" . (${^TAINT}*1) . "}"; 1250 eval "sub TAINT (){" . (${^TAINT}*1) . "}";
1251 1251
1252 delete @ENV{grep /^PERL_ANYEVENT_/, keys %ENV} 1252 delete @ENV{grep /^PERL_ANYEVENT_/, keys %ENV}
1253 if ${^TAINT}; 1253 if ${^TAINT};
1254 1254
2921This module is part of perl since release 5.008. It will be used when the 2921This module is part of perl since release 5.008. It will be used when the
2922chosen event library does not come with a timing source of its own. The 2922chosen event library does not come with a timing source of its own. The
2923pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to 2923pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to
2924try to use a monotonic clock for timing stability. 2924try to use a monotonic clock for timing stability.
2925 2925
2926=item L<AnyEvent::AIO> (and L<IO::AIO>)
2927
2928The default implementation of L<AnyEvent::IO> is to do I/O synchronously,
2929stopping programs while they access the disk, which is fine for a lot of
2930programs.
2931
2932Installing AnyEvent::AIO (and its IO::AIO dependency) makes it switch to
2933a true asynchronous implementation, so event processing can continue even
2934while waiting for disk I/O.
2935
2926=back 2936=back
2927 2937
2928 2938
2929=head1 FORK 2939=head1 FORK
2930 2940

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines