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.397 by root, Thu Mar 22 18:00:35 2012 UTC vs.
Revision 1.402 by root, Mon Apr 9 02:25:48 2012 UTC

1223 1223
1224package AnyEvent; 1224package AnyEvent;
1225 1225
1226# basically a tuned-down version of common::sense 1226# basically a tuned-down version of common::sense
1227sub common_sense { 1227sub common_sense {
1228 # from common:.sense 3.4 1228 # from common:.sense 3.5
1229 local $^W;
1229 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00"; 1230 ${^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) 1231 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl)
1231 $^H |= 0x00000600; 1232 $^H |= 0x00000600;
1232} 1233}
1233 1234
1395 1396
1396 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it 1397 # 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 1398 # 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 1399 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent
1399 # anyway. 1400 # anyway.
1400 AnyEvent::log fatal => "AnyEvent: IO::Async::Loop::AnyEvent detected - that module is broken by\n" 1401 AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n"
1401 . "design, abuses internals and breaks AnyEvent - will not continue." 1402 . "design, abuses internals and breaks AnyEvent - will not continue."
1402 if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; 1403 if exists $INC{"IO/Async/Loop/AnyEvent.pm"};
1403 1404
1404 local $!; # for good measure 1405 local $!; # for good measure
1405 local $SIG{__DIE__}; # we use eval 1406 local $SIG{__DIE__}; # we use eval
1416 1417
1417 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { 1418 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
1418 my $model = $1; 1419 my $model = $1;
1419 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; 1420 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//;
1420 if (eval "require $model") { 1421 if (eval "require $model") {
1421 AnyEvent::log 7 => "loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it."; 1422 AnyEvent::log 7 => "Loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it.";
1422 $MODEL = $model; 1423 $MODEL = $model;
1423 } else { 1424 } else {
1424 AnyEvent::log 4 => "unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@"; 1425 AnyEvent::log 4 => "Unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@";
1425 } 1426 }
1426 } 1427 }
1427 1428
1428 # check for already loaded models 1429 # check for already loaded models
1429 unless ($MODEL) { 1430 unless ($MODEL) {
1430 for (@REGISTRY, @models) { 1431 for (@REGISTRY, @models) {
1431 my ($package, $model) = @$_; 1432 my ($package, $model) = @$_;
1432 if (${"$package\::VERSION"} > 0) { 1433 if (${"$package\::VERSION"} > 0) {
1433 if (eval "require $model") { 1434 if (eval "require $model") {
1434 AnyEvent::log 7 => "autodetected model '$model', using it."; 1435 AnyEvent::log 7 => "Autodetected model '$model', using it.";
1435 $MODEL = $model; 1436 $MODEL = $model;
1436 last; 1437 last;
1437 } else { 1438 } else {
1438 AnyEvent::log 8 => "detected event loop $package, but cannot load '$model', skipping: $@"; 1439 AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@";
1439 } 1440 }
1440 } 1441 }
1441 } 1442 }
1442 1443
1443 unless ($MODEL) { 1444 unless ($MODEL) {
1447 if ( 1448 if (
1448 eval "require $package" 1449 eval "require $package"
1449 and ${"$package\::VERSION"} > 0 1450 and ${"$package\::VERSION"} > 0
1450 and eval "require $model" 1451 and eval "require $model"
1451 ) { 1452 ) {
1452 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1453 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1453 $MODEL = $model; 1454 $MODEL = $model;
1454 last; 1455 last;
1455 } 1456 }
1456 } 1457 }
1457 1458
1458 $MODEL 1459 $MODEL
1459 or AnyEvent::log fatal => "AnyEvent: backend autodetection failed - did you properly install AnyEvent?"; 1460 or AnyEvent::log fatal => "Backend autodetection failed - did you properly install AnyEvent?";
1460 } 1461 }
1461 } 1462 }
1462 1463
1463 # free memory only needed for probing 1464 # free memory only needed for probing
1464 undef @models; 1465 undef @models;
1611 # probe for availability of Time::HiRes 1612 # probe for availability of Time::HiRes
1612 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1613 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1613 *time = sub { Time::HiRes::time () }; 1614 *time = sub { Time::HiRes::time () };
1614 *AE::time = \& Time::HiRes::time ; 1615 *AE::time = \& Time::HiRes::time ;
1615 *now = \&time; 1616 *now = \&time;
1616 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1617 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1617 # if (eval "use POSIX (); (POSIX::times())... 1618 # if (eval "use POSIX (); (POSIX::times())...
1618 } else { 1619 } else {
1619 *time = sub { CORE::time }; 1620 *time = sub { CORE::time };
1620 *AE::time = sub (){ CORE::time }; 1621 *AE::time = sub (){ CORE::time };
1621 *now = \&time; 1622 *now = \&time;
1622 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1623 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1623 } 1624 }
1624 }; 1625 };
1625 die if $@; 1626 die if $@;
1626 1627
1627 &time 1628 &time
1721 1722
1722sub signal { 1723sub signal {
1723 eval q{ # poor man's autoloading {} 1724 eval q{ # poor man's autoloading {}
1724 # probe for availability of Async::Interrupt 1725 # probe for availability of Async::Interrupt
1725 if (_have_async_interrupt) { 1726 if (_have_async_interrupt) {
1726 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1727 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1727 1728
1728 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1729 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1729 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1730 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1730 1731
1731 } else { 1732 } else {
1732 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1733 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1733 1734
1734 if (AnyEvent::WIN32) { 1735 if (AnyEvent::WIN32) {
1735 require AnyEvent::Util; 1736 require AnyEvent::Util;
1736 1737
1737 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1738 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2176 2177
2177For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you 2178For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you
2178could start your program like this: 2179could start your program like this:
2179 2180
2180 PERL_ANYEVENT_MODEL=Perl perl ... 2181 PERL_ANYEVENT_MODEL=Perl perl ...
2182
2183=item C<PERL_ANYEVENT_IO_MODEL>
2184
2185The current file I/O model - see L<AnyEvent::IO> for more info.
2186
2187At the moment, only C<Perl> (small, pure-perl, synchronous) and
2188C<IOAIO> (truly asynchronous) are supported. The default is C<IOAIO> if
2189L<AnyEvent::AIO> can be loaded, otherwise it is C<Perl>.
2181 2190
2182=item C<PERL_ANYEVENT_PROTOCOLS> 2191=item C<PERL_ANYEVENT_PROTOCOLS>
2183 2192
2184Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences 2193Used 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 2194for IPv4 or IPv6. The default is unspecified (and might change, or be the result
3004L<AnyEvent::Impl::FLTK>. 3013L<AnyEvent::Impl::FLTK>.
3005 3014
3006Non-blocking handles, pipes, stream sockets, TCP clients and 3015Non-blocking handles, pipes, stream sockets, TCP clients and
3007servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3016servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3008 3017
3018Asynchronous File I/O: L<AnyEvent::IO>.
3019
3009Asynchronous DNS: L<AnyEvent::DNS>. 3020Asynchronous DNS: L<AnyEvent::DNS>.
3010 3021
3011Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>. 3022Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>.
3012 3023
3013Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3024Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3015 3026
3016 3027
3017=head1 AUTHOR 3028=head1 AUTHOR
3018 3029
3019 Marc Lehmann <schmorp@schmorp.de> 3030 Marc Lehmann <schmorp@schmorp.de>
3020 http://home.schmorp.de/ 3031 http://anyevent.schmorp.de
3021 3032
3022=cut 3033=cut
3023 3034
30241 30351
3025 3036

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines