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.396 by root, Sat Mar 10 17:36:24 2012 UTC vs.
Revision 1.410 by root, Fri Mar 1 06:03:21 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
1223 1231
1224package AnyEvent; 1232package AnyEvent;
1225 1233
1226# basically a tuned-down version of common::sense 1234# basically a tuned-down version of common::sense
1227sub common_sense { 1235sub common_sense {
1228 # from common:.sense 3.4 1236 # from common:.sense 3.5
1237 local $^W;
1229 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00"; 1238 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00";
1230 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl) 1239 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl)
1231 $^H |= 0x00000600; 1240 $^H |= 0x00000600;
1232} 1241}
1233 1242
1234BEGIN { AnyEvent::common_sense } 1243BEGIN { AnyEvent::common_sense }
1235 1244
1236use Carp (); 1245use Carp ();
1237 1246
1238our $VERSION = '6.14'; 1247our $VERSION = '7.04';
1239our $MODEL; 1248our $MODEL;
1240our @ISA; 1249our @ISA;
1241our @REGISTRY; 1250our @REGISTRY;
1242our $VERBOSE; 1251our $VERBOSE;
1243our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred 1252our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred
1395 1404
1396 # 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
1397 # 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
1398 # (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
1399 # anyway. 1408 # anyway.
1400 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"
1401 . "design, abuses internals and breaks AnyEvent - will not continue." 1410 . "design, abuses internals and breaks AnyEvent - will not continue."
1402 if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; 1411 if exists $INC{"IO/Async/Loop/AnyEvent.pm"};
1403 1412
1404 local $!; # for good measure 1413 local $!; # for good measure
1405 local $SIG{__DIE__}; # we use eval 1414 local $SIG{__DIE__}; # we use eval
1416 1425
1417 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { 1426 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
1418 my $model = $1; 1427 my $model = $1;
1419 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; 1428 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//;
1420 if (eval "require $model") { 1429 if (eval "require $model") {
1421 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.";
1422 $MODEL = $model; 1431 $MODEL = $model;
1423 } else { 1432 } else {
1424 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$@";
1425 } 1434 }
1426 } 1435 }
1427 1436
1428 # check for already loaded models 1437 # check for already loaded models
1429 unless ($MODEL) { 1438 unless ($MODEL) {
1430 for (@REGISTRY, @models) { 1439 for (@REGISTRY, @models) {
1431 my ($package, $model) = @$_; 1440 my ($package, $model) = @$_;
1432 if (${"$package\::VERSION"} > 0) { 1441 if (${"$package\::VERSION"} > 0) {
1433 if (eval "require $model") { 1442 if (eval "require $model") {
1434 AnyEvent::log 7 => "autodetected model '$model', using it."; 1443 AnyEvent::log 7 => "Autodetected model '$model', using it.";
1435 $MODEL = $model; 1444 $MODEL = $model;
1436 last; 1445 last;
1437 } else { 1446 } else {
1438 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: $@";
1439 } 1448 }
1440 } 1449 }
1441 } 1450 }
1442 1451
1443 unless ($MODEL) { 1452 unless ($MODEL) {
1447 if ( 1456 if (
1448 eval "require $package" 1457 eval "require $package"
1449 and ${"$package\::VERSION"} > 0 1458 and ${"$package\::VERSION"} > 0
1450 and eval "require $model" 1459 and eval "require $model"
1451 ) { 1460 ) {
1452 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1461 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1453 $MODEL = $model; 1462 $MODEL = $model;
1454 last; 1463 last;
1455 } 1464 }
1456 } 1465 }
1457 1466
1458 $MODEL 1467 $MODEL
1459 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?";
1460 } 1469 }
1461 } 1470 }
1462 1471
1463 # free memory only needed for probing 1472 # free memory only needed for probing
1464 undef @models; 1473 undef @models;
1611 # probe for availability of Time::HiRes 1620 # probe for availability of Time::HiRes
1612 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1621 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1613 *time = sub { Time::HiRes::time () }; 1622 *time = sub { Time::HiRes::time () };
1614 *AE::time = \& Time::HiRes::time ; 1623 *AE::time = \& Time::HiRes::time ;
1615 *now = \&time; 1624 *now = \&time;
1616 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1625 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1617 # if (eval "use POSIX (); (POSIX::times())... 1626 # if (eval "use POSIX (); (POSIX::times())...
1618 } else { 1627 } else {
1619 *time = sub { CORE::time }; 1628 *time = sub { CORE::time };
1620 *AE::time = sub (){ CORE::time }; 1629 *AE::time = sub (){ CORE::time };
1621 *now = \&time; 1630 *now = \&time;
1622 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1631 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1623 } 1632 }
1624 }; 1633 };
1625 die if $@; 1634 die if $@;
1626 1635
1627 &time 1636 &time
1721 1730
1722sub signal { 1731sub signal {
1723 eval q{ # poor man's autoloading {} 1732 eval q{ # poor man's autoloading {}
1724 # probe for availability of Async::Interrupt 1733 # probe for availability of Async::Interrupt
1725 if (_have_async_interrupt) { 1734 if (_have_async_interrupt) {
1726 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1735 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1727 1736
1728 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1737 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1729 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1738 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1730 1739
1731 } else { 1740 } else {
1732 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1741 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1733 1742
1734 if (AnyEvent::WIN32) { 1743 if (AnyEvent::WIN32) {
1735 require AnyEvent::Util; 1744 require AnyEvent::Util;
1736 1745
1737 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1746 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2073 2082
2074=over 4 2083=over 4
2075 2084
2076=item C<PERL_ANYEVENT_VERBOSE> 2085=item C<PERL_ANYEVENT_VERBOSE>
2077 2086
2078By default, AnyEvent will only log messages with loglevel C<3> 2087By default, AnyEvent will log messages with loglevel C<4> (C<error>) or
2079(C<critical>) or higher (see L<AnyEvent::Log>). You can set this 2088higher (see L<AnyEvent::Log>). You can set this environment variable to a
2080environment variable to a numerical loglevel to make AnyEvent more (or 2089numerical loglevel to make AnyEvent more (or less) talkative.
2081less) talkative.
2082 2090
2083If you want to do more than just set the global logging level 2091If you want to do more than just set the global logging level
2084you should have a look at C<PERL_ANYEVENT_LOG>, which allows much more 2092you should have a look at C<PERL_ANYEVENT_LOG>, which allows much more
2085complex specifications. 2093complex specifications.
2086 2094
2087When set to C<0> (C<off>), then no messages whatsoever will be logged with 2095When set to C<0> (C<off>), then no messages whatsoever will be logged with
2088the default logging settings. 2096everything else at defaults.
2089 2097
2090When set to C<5> or higher (C<warn>), causes AnyEvent to warn about 2098When set to C<5> or higher (C<warn>), AnyEvent warns about unexpected
2091unexpected conditions, such as not being able to load the event model 2099conditions, such as not being able to load the event model specified by
2092specified by C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an 2100C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an exception - this
2093exception - this is the minimum recommended level. 2101is the minimum recommended level for use during development.
2094 2102
2095When set to C<7> or higher (info), cause AnyEvent to report which event model it 2103When set to C<7> or higher (info), AnyEvent reports which event model it
2096chooses. 2104chooses.
2097 2105
2098When set to C<8> or higher (debug), then AnyEvent will report extra information on 2106When set to C<8> or higher (debug), then AnyEvent will report extra
2099which optional modules it loads and how it implements certain features. 2107information on which optional modules it loads and how it implements
2108certain features.
2100 2109
2101=item C<PERL_ANYEVENT_LOG> 2110=item C<PERL_ANYEVENT_LOG>
2102 2111
2103Accepts rather complex logging specifications. For example, you could log 2112Accepts rather complex logging specifications. For example, you could log
2104all C<debug> messages of some module to stderr, warnings and above to 2113all C<debug> messages of some module to stderr, warnings and above to
2111This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded, 2120This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded,
2112so will take effect even before AnyEvent has initialised itself. 2121so will take effect even before AnyEvent has initialised itself.
2113 2122
2114Note that specifying this environment variable causes the L<AnyEvent::Log> 2123Note that specifying this environment variable causes the L<AnyEvent::Log>
2115module to be loaded, while C<PERL_ANYEVENT_VERBOSE> does not, so only 2124module to be loaded, while C<PERL_ANYEVENT_VERBOSE> does not, so only
2116using the latter saves a few hundred kB of memory until the first message 2125using the latter saves a few hundred kB of memory unless a module
2117is being logged. 2126explicitly needs the extra features of AnyEvent::Log.
2118 2127
2119=item C<PERL_ANYEVENT_STRICT> 2128=item C<PERL_ANYEVENT_STRICT>
2120 2129
2121AnyEvent does not do much argument checking by default, as thorough 2130AnyEvent does not do much argument checking by default, as thorough
2122argument checking is very costly. Setting this variable to a true value 2131argument checking is very costly. Setting this variable to a true value
2176 2185
2177For 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
2178could start your program like this: 2187could start your program like this:
2179 2188
2180 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>.
2181 2198
2182=item C<PERL_ANYEVENT_PROTOCOLS> 2199=item C<PERL_ANYEVENT_PROTOCOLS>
2183 2200
2184Used 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
2185for 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
2912This 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
2913chosen 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
2914pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to 2931pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to
2915try to use a monotonic clock for timing stability. 2932try to use a monotonic clock for timing stability.
2916 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
2917=back 2944=back
2918 2945
2919 2946
2920=head1 FORK 2947=head1 FORK
2921 2948
3004L<AnyEvent::Impl::FLTK>. 3031L<AnyEvent::Impl::FLTK>.
3005 3032
3006Non-blocking handles, pipes, stream sockets, TCP clients and 3033Non-blocking handles, pipes, stream sockets, TCP clients and
3007servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3034servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3008 3035
3036Asynchronous File I/O: L<AnyEvent::IO>.
3037
3009Asynchronous DNS: L<AnyEvent::DNS>. 3038Asynchronous DNS: L<AnyEvent::DNS>.
3010 3039
3011Thread 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>.
3012 3041
3013Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3042Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3015 3044
3016 3045
3017=head1 AUTHOR 3046=head1 AUTHOR
3018 3047
3019 Marc Lehmann <schmorp@schmorp.de> 3048 Marc Lehmann <schmorp@schmorp.de>
3020 http://home.schmorp.de/ 3049 http://anyevent.schmorp.de
3021 3050
3022=cut 3051=cut
3023 3052
30241 30531
3025 3054

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines