… | |
… | |
731 | no warnings; |
731 | no warnings; |
732 | use strict; |
732 | use strict; |
733 | |
733 | |
734 | use Carp; |
734 | use Carp; |
735 | |
735 | |
736 | our $VERSION = '4.03'; |
736 | our $VERSION = '4.04'; |
737 | our $MODEL; |
737 | our $MODEL; |
738 | |
738 | |
739 | our $AUTOLOAD; |
739 | our $AUTOLOAD; |
740 | our @ISA; |
740 | our @ISA; |
741 | |
741 | |
742 | our @REGISTRY; |
742 | our @REGISTRY; |
743 | |
743 | |
|
|
744 | our $WIN32; |
|
|
745 | |
|
|
746 | BEGIN { |
|
|
747 | my $win32 = ! ! ($^O =~ /mswin32/i); |
|
|
748 | eval "sub WIN32(){ $win32 }"; |
|
|
749 | } |
|
|
750 | |
744 | our $verbose = $ENV{PERL_ANYEVENT_VERBOSE}*1; |
751 | our $verbose = $ENV{PERL_ANYEVENT_VERBOSE}*1; |
745 | |
752 | |
746 | our %PROTOCOL; # (ipv4|ipv6) => (1|2) |
753 | our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred |
747 | |
754 | |
748 | { |
755 | { |
749 | my $idx; |
756 | my $idx; |
750 | $PROTOCOL{$_} = ++$idx |
757 | $PROTOCOL{$_} = ++$idx |
|
|
758 | for reverse split /\s*,\s*/, |
751 | for split /\s*,\s*/, $ENV{PERL_ANYEVENT_PROTOCOLS} || "ipv4,ipv6"; |
759 | $ENV{PERL_ANYEVENT_PROTOCOLS} || "ipv4,ipv6"; |
|
|
760 | } |
|
|
761 | |
|
|
762 | sub import { |
|
|
763 | shift; |
|
|
764 | return unless @_; |
|
|
765 | |
|
|
766 | my $pkg = caller; |
|
|
767 | |
|
|
768 | no strict 'refs'; |
|
|
769 | |
|
|
770 | for (@_) { |
|
|
771 | *{"$pkg\::WIN32"} = *WIN32 if $_ eq "WIN32"; |
|
|
772 | } |
752 | } |
773 | } |
753 | |
774 | |
754 | my @models = ( |
775 | my @models = ( |
755 | [EV:: => AnyEvent::Impl::EV::], |
776 | [EV:: => AnyEvent::Impl::EV::], |
756 | [Event:: => AnyEvent::Impl::Event::], |
777 | [Event:: => AnyEvent::Impl::Event::], |
… | |
… | |
792 | } |
813 | } |
793 | |
814 | |
794 | sub detect() { |
815 | sub detect() { |
795 | unless ($MODEL) { |
816 | unless ($MODEL) { |
796 | no strict 'refs'; |
817 | no strict 'refs'; |
|
|
818 | local $SIG{__DIE__}; |
797 | |
819 | |
798 | if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z]+)$/) { |
820 | if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z]+)$/) { |
799 | my $model = "AnyEvent::Impl::$1"; |
821 | my $model = "AnyEvent::Impl::$1"; |
800 | if (eval "require $model") { |
822 | if (eval "require $model") { |
801 | $MODEL = $model; |
823 | $MODEL = $model; |
… | |
… | |
924 | or Carp::croak "required option 'pid' is missing"; |
946 | or Carp::croak "required option 'pid' is missing"; |
925 | |
947 | |
926 | $PID_CB{$pid}{$arg{cb}} = $arg{cb}; |
948 | $PID_CB{$pid}{$arg{cb}} = $arg{cb}; |
927 | |
949 | |
928 | unless ($WNOHANG) { |
950 | unless ($WNOHANG) { |
929 | $WNOHANG = eval { require POSIX; &POSIX::WNOHANG } || 1; |
951 | $WNOHANG = eval { local $SIG{__DIE__}; require POSIX; &POSIX::WNOHANG } || 1; |
930 | } |
952 | } |
931 | |
953 | |
932 | unless ($CHLD_W) { |
954 | unless ($CHLD_W) { |
933 | $CHLD_W = AnyEvent->signal (signal => 'CHLD', cb => \&_sigchld); |
955 | $CHLD_W = AnyEvent->signal (signal => 'CHLD', cb => \&_sigchld); |
934 | # child could be a zombie already, so make at least one round |
956 | # child could be a zombie already, so make at least one round |