1 | =head1 NAME |
1 | =head1 NAME |
2 | |
2 | |
3 | AnyEvent - events independent of event loop implementation |
3 | AnyEvent - the DBI of event loop programming |
4 | |
4 | |
5 | EV, Event, Glib, Tk, Perl, Event::Lib, Qt and POE are various supported |
5 | EV, Event, Glib, Tk, Perl, Event::Lib, Irssi, rxvt-unicode, IO::Async, Qt |
6 | event loops. |
6 | and POE are various supported event loops/environments. |
7 | |
7 | |
8 | =head1 SYNOPSIS |
8 | =head1 SYNOPSIS |
9 | |
9 | |
10 | use AnyEvent; |
10 | use AnyEvent; |
11 | |
11 | |
… | |
… | |
47 | |
47 | |
48 | There is a mailinglist for discussing all things AnyEvent, and an IRC |
48 | There is a mailinglist for discussing all things AnyEvent, and an IRC |
49 | channel, too. |
49 | channel, too. |
50 | |
50 | |
51 | See the AnyEvent project page at the B<Schmorpforge Ta-Sa Software |
51 | See the AnyEvent project page at the B<Schmorpforge Ta-Sa Software |
52 | Respository>, at L<http://anyevent.schmorp.de>, for more info. |
52 | Repository>, at L<http://anyevent.schmorp.de>, for more info. |
53 | |
53 | |
54 | =head1 WHY YOU SHOULD USE THIS MODULE (OR NOT) |
54 | =head1 WHY YOU SHOULD USE THIS MODULE (OR NOT) |
55 | |
55 | |
56 | Glib, POE, IO::Async, Event... CPAN offers event models by the dozen |
56 | Glib, POE, IO::Async, Event... CPAN offers event models by the dozen |
57 | nowadays. So what is different about AnyEvent? |
57 | nowadays. So what is different about AnyEvent? |
… | |
… | |
400 | |
400 | |
401 | =head2 CHILD PROCESS WATCHERS |
401 | =head2 CHILD PROCESS WATCHERS |
402 | |
402 | |
403 | You can also watch on a child process exit and catch its exit status. |
403 | You can also watch on a child process exit and catch its exit status. |
404 | |
404 | |
405 | The child process is specified by the C<pid> argument (if set to C<0>, it |
405 | The child process is specified by the C<pid> argument (one some backends, |
406 | watches for any child process exit). The watcher will triggered only when |
406 | using C<0> watches for any child process exit, on others this will |
407 | the child process has finished and an exit status is available, not on |
407 | croak). The watcher will be triggered only when the child process has |
408 | any trace events (stopped/continued). |
408 | finished and an exit status is available, not on any trace events |
|
|
409 | (stopped/continued). |
409 | |
410 | |
410 | The callback will be called with the pid and exit status (as returned by |
411 | The callback will be called with the pid and exit status (as returned by |
411 | waitpid), so unlike other watcher types, you I<can> rely on child watcher |
412 | waitpid), so unlike other watcher types, you I<can> rely on child watcher |
412 | callback arguments. |
413 | callback arguments. |
413 | |
414 | |
… | |
… | |
796 | |
797 | |
797 | AnyEvent::Impl::Glib based on Glib, slow but very stable. |
798 | AnyEvent::Impl::Glib based on Glib, slow but very stable. |
798 | AnyEvent::Impl::Tk based on Tk, very broken. |
799 | AnyEvent::Impl::Tk based on Tk, very broken. |
799 | AnyEvent::Impl::EventLib based on Event::Lib, leaks memory and worse. |
800 | AnyEvent::Impl::EventLib based on Event::Lib, leaks memory and worse. |
800 | AnyEvent::Impl::POE based on POE, very slow, some limitations. |
801 | AnyEvent::Impl::POE based on POE, very slow, some limitations. |
|
|
802 | AnyEvent::Impl::Irssi used when running within irssi. |
801 | |
803 | |
802 | =item Backends with special needs. |
804 | =item Backends with special needs. |
803 | |
805 | |
804 | Qt requires the Qt::Application to be instantiated first, but will |
806 | Qt requires the Qt::Application to be instantiated first, but will |
805 | otherwise be picked up automatically. As long as the main program |
807 | otherwise be picked up automatically. As long as the main program |
… | |
… | |
1084 | |
1086 | |
1085 | BEGIN { AnyEvent::common_sense } |
1087 | BEGIN { AnyEvent::common_sense } |
1086 | |
1088 | |
1087 | use Carp (); |
1089 | use Carp (); |
1088 | |
1090 | |
1089 | our $VERSION = 4.86; |
1091 | our $VERSION = 4.881; |
1090 | our $MODEL; |
1092 | our $MODEL; |
1091 | |
1093 | |
1092 | our $AUTOLOAD; |
1094 | our $AUTOLOAD; |
1093 | our @ISA; |
1095 | our @ISA; |
1094 | |
1096 | |
… | |
… | |
1119 | for reverse split /\s*,\s*/, |
1121 | for reverse split /\s*,\s*/, |
1120 | $ENV{PERL_ANYEVENT_PROTOCOLS} || "ipv4,ipv6"; |
1122 | $ENV{PERL_ANYEVENT_PROTOCOLS} || "ipv4,ipv6"; |
1121 | } |
1123 | } |
1122 | |
1124 | |
1123 | my @models = ( |
1125 | my @models = ( |
1124 | [EV:: => AnyEvent::Impl::EV::], |
1126 | [EV:: => AnyEvent::Impl::EV:: , 1], |
1125 | [Event:: => AnyEvent::Impl::Event::], |
1127 | [Event:: => AnyEvent::Impl::Event::, 1], |
1126 | [AnyEvent::Impl::Perl:: => AnyEvent::Impl::Perl::], |
1128 | [AnyEvent::Impl::Perl:: => AnyEvent::Impl::Perl:: , 1], |
1127 | # everything below here will not be autoprobed |
1129 | # everything below here will not (normally) be autoprobed |
1128 | # as the pureperl backend should work everywhere |
1130 | # as the pureperl backend should work everywhere |
1129 | # and is usually faster |
1131 | # and is usually faster |
1130 | [Glib:: => AnyEvent::Impl::Glib::], # becomes extremely slow with many watchers |
1132 | [Glib:: => AnyEvent::Impl::Glib:: , 1], # becomes extremely slow with many watchers |
1131 | [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy |
1133 | [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy |
|
|
1134 | [Irssi:: => AnyEvent::Impl::Irssi::], # Irssi has a bogus "Event" package |
1132 | [Tk:: => AnyEvent::Impl::Tk::], # crashes with many handles |
1135 | [Tk:: => AnyEvent::Impl::Tk::], # crashes with many handles |
1133 | [Qt:: => AnyEvent::Impl::Qt::], # requires special main program |
1136 | [Qt:: => AnyEvent::Impl::Qt::], # requires special main program |
1134 | [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza |
1137 | [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza |
1135 | [Wx:: => AnyEvent::Impl::POE::], |
1138 | [Wx:: => AnyEvent::Impl::POE::], |
1136 | [Prima:: => AnyEvent::Impl::POE::], |
1139 | [Prima:: => AnyEvent::Impl::POE::], |
1137 | # IO::Async is just too broken - we would need workarounds for its |
1140 | # IO::Async is just too broken - we would need workarounds for its |
1138 | # byzantine signal and broken child handling, among others. |
1141 | # byzantine signal and broken child handling, among others. |
1139 | # IO::Async is rather hard to detect, as it doesn't have any |
1142 | # IO::Async is rather hard to detect, as it doesn't have any |
1140 | # obvious default class. |
1143 | # obvious default class. |
1141 | # [IO::Async:: => AnyEvent::Impl::IOAsync::], # requires special main program |
1144 | # [0, IO::Async:: => AnyEvent::Impl::IOAsync::], # requires special main program |
1142 | # [IO::Async::Loop:: => AnyEvent::Impl::IOAsync::], # requires special main program |
1145 | # [0, IO::Async::Loop:: => AnyEvent::Impl::IOAsync::], # requires special main program |
1143 | # [IO::Async::Notifier:: => AnyEvent::Impl::IOAsync::], # requires special main program |
1146 | # [0, IO::Async::Notifier:: => AnyEvent::Impl::IOAsync::], # requires special main program |
1144 | ); |
1147 | ); |
1145 | |
1148 | |
1146 | our %method = map +($_ => 1), |
1149 | our %method = map +($_ => 1), |
1147 | qw(io timer time now now_update signal child idle condvar one_event DESTROY); |
1150 | qw(io timer time now now_update signal child idle condvar one_event DESTROY); |
1148 | |
1151 | |
… | |
… | |
1194 | } |
1197 | } |
1195 | } |
1198 | } |
1196 | } |
1199 | } |
1197 | |
1200 | |
1198 | unless ($MODEL) { |
1201 | unless ($MODEL) { |
1199 | # try to load a model |
1202 | # try to autoload a model |
1200 | |
|
|
1201 | for (@REGISTRY, @models) { |
1203 | for (@REGISTRY, @models) { |
1202 | my ($package, $model) = @$_; |
1204 | my ($package, $model, $autoload) = @$_; |
|
|
1205 | if ( |
|
|
1206 | $autoload |
1203 | if (eval "require $package" |
1207 | and eval "require $package" |
1204 | and ${"$package\::VERSION"} > 0 |
1208 | and ${"$package\::VERSION"} > 0 |
1205 | and eval "require $model") { |
1209 | and eval "require $model" |
|
|
1210 | ) { |
1206 | $MODEL = $model; |
1211 | $MODEL = $model; |
1207 | warn "AnyEvent: autoprobed model '$model', using it.\n" if $VERBOSE >= 2; |
1212 | warn "AnyEvent: autoloaded model '$model', using it.\n" if $VERBOSE >= 2; |
1208 | last; |
1213 | last; |
1209 | } |
1214 | } |
1210 | } |
1215 | } |
1211 | |
1216 | |
1212 | $MODEL |
1217 | $MODEL |
… | |
… | |
1422 | our %PID_CB; |
1427 | our %PID_CB; |
1423 | our $CHLD_W; |
1428 | our $CHLD_W; |
1424 | our $CHLD_DELAY_W; |
1429 | our $CHLD_DELAY_W; |
1425 | our $WNOHANG; |
1430 | our $WNOHANG; |
1426 | |
1431 | |
|
|
1432 | sub _emit_childstatus($$) { |
|
|
1433 | my (undef, $rpid, $rstatus) = @_; |
|
|
1434 | |
|
|
1435 | $_->($rpid, $rstatus) |
|
|
1436 | for values %{ $PID_CB{$rpid} || {} }, |
|
|
1437 | values %{ $PID_CB{0} || {} }; |
|
|
1438 | } |
|
|
1439 | |
1427 | sub _sigchld { |
1440 | sub _sigchld { |
|
|
1441 | my $pid; |
|
|
1442 | |
|
|
1443 | AnyEvent->_emit_childstatus ($pid, $?) |
1428 | while (0 < (my $pid = waitpid -1, $WNOHANG)) { |
1444 | while ($pid = waitpid -1, $WNOHANG) > 0; |
1429 | $_->($pid, $?) |
|
|
1430 | for values %{ $PID_CB{$pid} || {} }, |
|
|
1431 | values %{ $PID_CB{0} || {} }; |
|
|
1432 | } |
|
|
1433 | } |
1445 | } |
1434 | |
1446 | |
1435 | sub child { |
1447 | sub child { |
1436 | my (undef, %arg) = @_; |
1448 | my (undef, %arg) = @_; |
1437 | |
1449 | |
… | |
… | |
2416 | L<Glib>, L<Tk>, L<Event::Lib>, L<Qt>, L<POE>. |
2428 | L<Glib>, L<Tk>, L<Event::Lib>, L<Qt>, L<POE>. |
2417 | |
2429 | |
2418 | Implementations: L<AnyEvent::Impl::EV>, L<AnyEvent::Impl::Event>, |
2430 | Implementations: L<AnyEvent::Impl::EV>, L<AnyEvent::Impl::Event>, |
2419 | L<AnyEvent::Impl::Glib>, L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, |
2431 | L<AnyEvent::Impl::Glib>, L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, |
2420 | L<AnyEvent::Impl::EventLib>, L<AnyEvent::Impl::Qt>, |
2432 | L<AnyEvent::Impl::EventLib>, L<AnyEvent::Impl::Qt>, |
2421 | L<AnyEvent::Impl::POE>, L<AnyEvent::Impl::IOAsync>. |
2433 | L<AnyEvent::Impl::POE>, L<AnyEvent::Impl::IOAsync>, L<Anyevent::Impl::Irssi>. |
2422 | |
2434 | |
2423 | Non-blocking file handles, sockets, TCP clients and |
2435 | Non-blocking file handles, sockets, TCP clients and |
2424 | servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. |
2436 | servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. |
2425 | |
2437 | |
2426 | Asynchronous DNS: L<AnyEvent::DNS>. |
2438 | Asynchronous DNS: L<AnyEvent::DNS>. |