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.398 by root, Tue Mar 27 16:21:11 2012 UTC vs.
Revision 1.411 by root, Fri Apr 5 20:31:41 2013 UTC

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.
1234 1242
1235BEGIN { AnyEvent::common_sense } 1243BEGIN { AnyEvent::common_sense }
1236 1244
1237use Carp (); 1245use Carp ();
1238 1246
1239our $VERSION = '6.14'; 1247our $VERSION = '7.04';
1240our $MODEL; 1248our $MODEL;
1241our @ISA; 1249our @ISA;
1242our @REGISTRY; 1250our @REGISTRY;
1243our $VERBOSE; 1251our $VERBOSE;
1244our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred 1252our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred
1396 1404
1397 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it 1405 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it
1398 # the author knows about the problems and what it does to AnyEvent as a whole 1406 # the author knows about the problems and what it does to AnyEvent as a whole
1399 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent 1407 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent
1400 # anyway. 1408 # anyway.
1401 AnyEvent::log fatal => "AnyEvent: IO::Async::Loop::AnyEvent detected - that module is broken by\n" 1409 AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n"
1402 . "design, abuses internals and breaks AnyEvent - will not continue." 1410 . "design, abuses internals and breaks AnyEvent - will not continue."
1403 if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; 1411 if exists $INC{"IO/Async/Loop/AnyEvent.pm"};
1404 1412
1405 local $!; # for good measure 1413 local $!; # for good measure
1406 local $SIG{__DIE__}; # we use eval 1414 local $SIG{__DIE__}; # we use eval
1417 1425
1418 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { 1426 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
1419 my $model = $1; 1427 my $model = $1;
1420 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; 1428 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//;
1421 if (eval "require $model") { 1429 if (eval "require $model") {
1422 AnyEvent::log 7 => "loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it."; 1430 AnyEvent::log 7 => "Loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it.";
1423 $MODEL = $model; 1431 $MODEL = $model;
1424 } else { 1432 } else {
1425 AnyEvent::log 4 => "unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@"; 1433 AnyEvent::log 4 => "Unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@";
1426 } 1434 }
1427 } 1435 }
1428 1436
1429 # check for already loaded models 1437 # check for already loaded models
1430 unless ($MODEL) { 1438 unless ($MODEL) {
1431 for (@REGISTRY, @models) { 1439 for (@REGISTRY, @models) {
1432 my ($package, $model) = @$_; 1440 my ($package, $model) = @$_;
1433 if (${"$package\::VERSION"} > 0) { 1441 if (${"$package\::VERSION"} > 0) {
1434 if (eval "require $model") { 1442 if (eval "require $model") {
1435 AnyEvent::log 7 => "autodetected model '$model', using it."; 1443 AnyEvent::log 7 => "Autodetected model '$model', using it.";
1436 $MODEL = $model; 1444 $MODEL = $model;
1437 last; 1445 last;
1438 } else { 1446 } else {
1439 AnyEvent::log 8 => "detected event loop $package, but cannot load '$model', skipping: $@"; 1447 AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@";
1440 } 1448 }
1441 } 1449 }
1442 } 1450 }
1443 1451
1444 unless ($MODEL) { 1452 unless ($MODEL) {
1448 if ( 1456 if (
1449 eval "require $package" 1457 eval "require $package"
1450 and ${"$package\::VERSION"} > 0 1458 and ${"$package\::VERSION"} > 0
1451 and eval "require $model" 1459 and eval "require $model"
1452 ) { 1460 ) {
1453 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1461 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1454 $MODEL = $model; 1462 $MODEL = $model;
1455 last; 1463 last;
1456 } 1464 }
1457 } 1465 }
1458 1466
1459 $MODEL 1467 $MODEL
1460 or AnyEvent::log fatal => "AnyEvent: backend autodetection failed - did you properly install AnyEvent?"; 1468 or AnyEvent::log fatal => "Backend autodetection failed - did you properly install AnyEvent?";
1461 } 1469 }
1462 } 1470 }
1463 1471
1464 # free memory only needed for probing 1472 # free memory only needed for probing
1465 undef @models; 1473 undef @models;
1612 # probe for availability of Time::HiRes 1620 # probe for availability of Time::HiRes
1613 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1621 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1614 *time = sub { Time::HiRes::time () }; 1622 *time = sub { Time::HiRes::time () };
1615 *AE::time = \& Time::HiRes::time ; 1623 *AE::time = \& Time::HiRes::time ;
1616 *now = \&time; 1624 *now = \&time;
1617 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1625 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1618 # if (eval "use POSIX (); (POSIX::times())... 1626 # if (eval "use POSIX (); (POSIX::times())...
1619 } else { 1627 } else {
1620 *time = sub { CORE::time }; 1628 *time = sub { CORE::time };
1621 *AE::time = sub (){ CORE::time }; 1629 *AE::time = sub (){ CORE::time };
1622 *now = \&time; 1630 *now = \&time;
1623 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1631 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1624 } 1632 }
1625 }; 1633 };
1626 die if $@; 1634 die if $@;
1627 1635
1628 &time 1636 &time
1722 1730
1723sub signal { 1731sub signal {
1724 eval q{ # poor man's autoloading {} 1732 eval q{ # poor man's autoloading {}
1725 # probe for availability of Async::Interrupt 1733 # probe for availability of Async::Interrupt
1726 if (_have_async_interrupt) { 1734 if (_have_async_interrupt) {
1727 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1735 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1728 1736
1729 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1737 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1730 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1738 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1731 1739
1732 } else { 1740 } else {
1733 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1741 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1734 1742
1735 if (AnyEvent::WIN32) { 1743 if (AnyEvent::WIN32) {
1736 require AnyEvent::Util; 1744 require AnyEvent::Util;
1737 1745
1738 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1746 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2177 2185
2178For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you 2186For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you
2179could start your program like this: 2187could start your program like this:
2180 2188
2181 PERL_ANYEVENT_MODEL=Perl perl ... 2189 PERL_ANYEVENT_MODEL=Perl perl ...
2190
2191=item C<PERL_ANYEVENT_IO_MODEL>
2192
2193The current file I/O model - see L<AnyEvent::IO> for more info.
2194
2195At the moment, only C<Perl> (small, pure-perl, synchronous) and
2196C<IOAIO> (truly asynchronous) are supported. The default is C<IOAIO> if
2197L<AnyEvent::AIO> can be loaded, otherwise it is C<Perl>.
2182 2198
2183=item C<PERL_ANYEVENT_PROTOCOLS> 2199=item C<PERL_ANYEVENT_PROTOCOLS>
2184 2200
2185Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences 2201Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences
2186for IPv4 or IPv6. The default is unspecified (and might change, or be the result 2202for IPv4 or IPv6. The default is unspecified (and might change, or be the result
2913This module is part of perl since release 5.008. It will be used when the 2929This module is part of perl since release 5.008. It will be used when the
2914chosen event library does not come with a timing source of its own. The 2930chosen event library does not come with a timing source of its own. The
2915pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to 2931pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to
2916try to use a monotonic clock for timing stability. 2932try to use a monotonic clock for timing stability.
2917 2933
2934=item L<AnyEvent::AIO> (and L<IO::AIO>)
2935
2936The default implementation of L<AnyEvent::IO> is to do I/O synchronously,
2937stopping programs while they access the disk, which is fine for a lot of
2938programs.
2939
2940Installing AnyEvent::AIO (and its IO::AIO dependency) makes it switch to
2941a true asynchronous implementation, so event processing can continue even
2942while waiting for disk I/O.
2943
2918=back 2944=back
2919 2945
2920 2946
2921=head1 FORK 2947=head1 FORK
2922 2948
3005L<AnyEvent::Impl::FLTK>. 3031L<AnyEvent::Impl::FLTK>.
3006 3032
3007Non-blocking handles, pipes, stream sockets, TCP clients and 3033Non-blocking handles, pipes, stream sockets, TCP clients and
3008servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3034servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3009 3035
3036Asynchronous File I/O: L<AnyEvent::IO>.
3037
3010Asynchronous DNS: L<AnyEvent::DNS>. 3038Asynchronous DNS: L<AnyEvent::DNS>.
3011 3039
3012Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>. 3040Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>.
3013 3041
3014Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3042Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3016 3044
3017 3045
3018=head1 AUTHOR 3046=head1 AUTHOR
3019 3047
3020 Marc Lehmann <schmorp@schmorp.de> 3048 Marc Lehmann <schmorp@schmorp.de>
3021 http://home.schmorp.de/ 3049 http://anyevent.schmorp.de
3022 3050
3023=cut 3051=cut
3024 3052
30251 30531
3026 3054

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines