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.390 by root, Tue Oct 4 17:45:04 2011 UTC vs.
Revision 1.410 by root, Fri Mar 1 06:03:21 2013 UTC

433as you cannot do race-free signal handling in perl, requiring 433as you cannot do race-free signal handling in perl, requiring
434C libraries for this. AnyEvent will try to do its best, which 434C libraries for this. AnyEvent will try to do its best, which
435means in some cases, signals will be delayed. The maximum time 435means in some cases, signals will be delayed. The maximum time
436a signal might be delayed is 10 seconds by default, but can 436a signal might be delayed is 10 seconds by default, but can
437be overriden via C<$ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY}> or 437be overriden via C<$ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY}> or
438C<$AnyEvent::MAX_SIGNAL_LATENCY> - see the Ö<ENVIRONMENT VARIABLES> 438C<$AnyEvent::MAX_SIGNAL_LATENCY> - see the L<ENVIRONMENT VARIABLES>
439section for details. 439section for details.
440 440
441All these problems can be avoided by installing the optional 441All these problems can be avoided by installing the optional
442L<Async::Interrupt> module, which works with most event loops. It will not 442L<Async::Interrupt> module, which works with most event loops. It will not
443work with inherently broken event loops such as L<Event> or L<Event::Lib> 443work with inherently broken event loops such as L<Event> or L<Event::Lib>
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.1'; 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 - this module is broken by design,\n" 1409 AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n"
1401 . "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
1406 1415
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;
1446 } else {
1447 AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@";
1437 } 1448 }
1438 } 1449 }
1439 } 1450 }
1440 1451
1441 unless ($MODEL) { 1452 unless ($MODEL) {
1445 if ( 1456 if (
1446 eval "require $package" 1457 eval "require $package"
1447 and ${"$package\::VERSION"} > 0 1458 and ${"$package\::VERSION"} > 0
1448 and eval "require $model" 1459 and eval "require $model"
1449 ) { 1460 ) {
1450 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1461 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1451 $MODEL = $model; 1462 $MODEL = $model;
1452 last; 1463 last;
1453 } 1464 }
1454 } 1465 }
1455 1466
1456 $MODEL 1467 $MODEL
1457 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?";
1458 } 1469 }
1459 } 1470 }
1460 1471
1461 # free memory only needed for probing 1472 # free memory only needed for probing
1462 undef @models; 1473 undef @models;
1609 # probe for availability of Time::HiRes 1620 # probe for availability of Time::HiRes
1610 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1621 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1611 *time = sub { Time::HiRes::time () }; 1622 *time = sub { Time::HiRes::time () };
1612 *AE::time = \& Time::HiRes::time ; 1623 *AE::time = \& Time::HiRes::time ;
1613 *now = \&time; 1624 *now = \&time;
1614 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1625 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1615 # if (eval "use POSIX (); (POSIX::times())... 1626 # if (eval "use POSIX (); (POSIX::times())...
1616 } else { 1627 } else {
1617 *time = sub { CORE::time }; 1628 *time = sub { CORE::time };
1618 *AE::time = sub (){ CORE::time }; 1629 *AE::time = sub (){ CORE::time };
1619 *now = \&time; 1630 *now = \&time;
1620 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1631 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1621 } 1632 }
1622 }; 1633 };
1623 die if $@; 1634 die if $@;
1624 1635
1625 &time 1636 &time
1719 1730
1720sub signal { 1731sub signal {
1721 eval q{ # poor man's autoloading {} 1732 eval q{ # poor man's autoloading {}
1722 # probe for availability of Async::Interrupt 1733 # probe for availability of Async::Interrupt
1723 if (_have_async_interrupt) { 1734 if (_have_async_interrupt) {
1724 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1735 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1725 1736
1726 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1737 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1727 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1738 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1728 1739
1729 } else { 1740 } else {
1730 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1741 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1731 1742
1732 if (AnyEvent::WIN32) { 1743 if (AnyEvent::WIN32) {
1733 require AnyEvent::Util; 1744 require AnyEvent::Util;
1734 1745
1735 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1746 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2071 2082
2072=over 4 2083=over 4
2073 2084
2074=item C<PERL_ANYEVENT_VERBOSE> 2085=item C<PERL_ANYEVENT_VERBOSE>
2075 2086
2076By default, AnyEvent will only log messages with loglevel C<3> 2087By default, AnyEvent will log messages with loglevel C<4> (C<error>) or
2077(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
2078environment variable to a numerical loglevel to make AnyEvent more (or 2089numerical loglevel to make AnyEvent more (or less) talkative.
2079less) talkative.
2080 2090
2081If 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
2082you 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
2083complex specifications. 2093complex specifications.
2084 2094
2085When 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
2086the default logging settings. 2096everything else at defaults.
2087 2097
2088When 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
2089unexpected conditions, such as not being able to load the event model 2099conditions, such as not being able to load the event model specified by
2090specified by C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an 2100C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an exception - this
2091exception - this is the minimum recommended level. 2101is the minimum recommended level for use during development.
2092 2102
2093When 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
2094chooses. 2104chooses.
2095 2105
2096When 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
2097which optional modules it loads and how it implements certain features. 2107information on which optional modules it loads and how it implements
2108certain features.
2098 2109
2099=item C<PERL_ANYEVENT_LOG> 2110=item C<PERL_ANYEVENT_LOG>
2100 2111
2101Accepts rather complex logging specifications. For example, you could log 2112Accepts rather complex logging specifications. For example, you could log
2102all 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
2109This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded, 2120This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded,
2110so will take effect even before AnyEvent has initialised itself. 2121so will take effect even before AnyEvent has initialised itself.
2111 2122
2112Note that specifying this environment variable causes the L<AnyEvent::Log> 2123Note that specifying this environment variable causes the L<AnyEvent::Log>
2113module 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
2114using 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
2115is being logged. 2126explicitly needs the extra features of AnyEvent::Log.
2116 2127
2117=item C<PERL_ANYEVENT_STRICT> 2128=item C<PERL_ANYEVENT_STRICT>
2118 2129
2119AnyEvent does not do much argument checking by default, as thorough 2130AnyEvent does not do much argument checking by default, as thorough
2120argument checking is very costly. Setting this variable to a true value 2131argument checking is very costly. Setting this variable to a true value
2174 2185
2175For 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
2176could start your program like this: 2187could start your program like this:
2177 2188
2178 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>.
2179 2198
2180=item C<PERL_ANYEVENT_PROTOCOLS> 2199=item C<PERL_ANYEVENT_PROTOCOLS>
2181 2200
2182Used 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
2183for 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
2910This 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
2911chosen 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
2912pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to 2931pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to
2913try to use a monotonic clock for timing stability. 2932try to use a monotonic clock for timing stability.
2914 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
2915=back 2944=back
2916 2945
2917 2946
2918=head1 FORK 2947=head1 FORK
2919 2948
3002L<AnyEvent::Impl::FLTK>. 3031L<AnyEvent::Impl::FLTK>.
3003 3032
3004Non-blocking handles, pipes, stream sockets, TCP clients and 3033Non-blocking handles, pipes, stream sockets, TCP clients and
3005servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3034servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3006 3035
3036Asynchronous File I/O: L<AnyEvent::IO>.
3037
3007Asynchronous DNS: L<AnyEvent::DNS>. 3038Asynchronous DNS: L<AnyEvent::DNS>.
3008 3039
3009Thread 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>.
3010 3041
3011Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3042Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3013 3044
3014 3045
3015=head1 AUTHOR 3046=head1 AUTHOR
3016 3047
3017 Marc Lehmann <schmorp@schmorp.de> 3048 Marc Lehmann <schmorp@schmorp.de>
3018 http://home.schmorp.de/ 3049 http://anyevent.schmorp.de
3019 3050
3020=cut 3051=cut
3021 3052
30221 30531
3023 3054

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines