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.398 by root, Tue Mar 27 16:21:11 2012 UTC vs.
Revision 1.417 by root, Tue Dec 17 18:36:22 2013 UTC

271 271
272Example 2: fire an event after 0.5 seconds, then roughly every second. 272Example 2: fire an event after 0.5 seconds, then roughly every second.
273 273
274 my $w = AnyEvent->timer (after => 0.5, interval => 1, cb => sub { 274 my $w = AnyEvent->timer (after => 0.5, interval => 1, cb => sub {
275 warn "timeout\n"; 275 warn "timeout\n";
276 }; 276 });
277 277
278=head3 TIMING ISSUES 278=head3 TIMING ISSUES
279 279
280There are two ways to handle timers: based on real time (relative, "fire 280There are two ways to handle timers: based on real time (relative, "fire
281in 10 seconds") and based on wallclock time (absolute, "fire at 12 281in 10 seconds") and based on wallclock time (absolute, "fire at 12
487 487
488Example: fork a process and wait for it 488Example: fork a process and wait for it
489 489
490 my $done = AnyEvent->condvar; 490 my $done = AnyEvent->condvar;
491 491
492 # this forks and immediately calls exit in the child. this
493 # normally has all sorts of bad consequences for your parent,
494 # so take this as an example only. always fork and exec,
495 # or call POSIX::_exit, in real code.
492 my $pid = fork or exit 5; 496 my $pid = fork or exit 5;
493 497
494 my $w = AnyEvent->child ( 498 my $w = AnyEvent->child (
495 pid => $pid, 499 pid => $pid,
496 cb => sub { 500 cb => sub {
745This works because for every event source (EOF on file handle), there is 749This works because for every event source (EOF on file handle), there is
746one call to C<begin>, so the condvar waits for all calls to C<end> before 750one call to C<begin>, so the condvar waits for all calls to C<end> before
747sending. 751sending.
748 752
749The ping example mentioned above is slightly more complicated, as the 753The ping example mentioned above is slightly more complicated, as the
750there are results to be passwd back, and the number of tasks that are 754there are results to be passed back, and the number of tasks that are
751begun can potentially be zero: 755begun can potentially be zero:
752 756
753 my $cv = AnyEvent->condvar; 757 my $cv = AnyEvent->condvar;
754 758
755 my %result; 759 my %result;
763 }; 767 };
764 } 768 }
765 769
766 $cv->end; 770 $cv->end;
767 771
772 ...
773
774 my $results = $cv->recv;
775
768This code fragment supposedly pings a number of hosts and calls 776This code fragment supposedly pings a number of hosts and calls
769C<send> after results for all then have have been gathered - in any 777C<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 778order. 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 779each 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 780it. Since C<begin> and C<end> only maintain a counter, the order in which
807 815
808In list context, all parameters passed to C<send> will be returned, 816In list context, all parameters passed to C<send> will be returned,
809in scalar context only the first one will be returned. 817in scalar context only the first one will be returned.
810 818
811Note that doing a blocking wait in a callback is not supported by any 819Note that doing a blocking wait in a callback is not supported by any
812event loop, that is, recursive invocation of a blocking C<< ->recv 820event 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 821not 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 822detected. This requirement can be dropped by relying on L<Coro::AnyEvent>
815L<Coro::AnyEvent>, which allows you to do a blocking C<< ->recv >> from 823, which allows you to do a blocking C<< ->recv >> from any thread
816any thread that doesn't run the event loop itself. 824that doesn't run the event loop itself. L<Coro::AnyEvent> is loaded
825automatically when L<Coro> is used with L<AnyEvent>, so code does not need
826to do anything special to take advantage of that: any code that would
827normally block your program because it calls C<recv>, be executed in an
828C<async> thread instead without blocking other threads.
817 829
818Not all event models support a blocking wait - some die in that case 830Not 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 831(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 832using 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 833caller decide whether the call will block or not (for example, by coupling
1139a longer non-exhaustive list), and the list is heavily biased towards 1151a longer non-exhaustive list), and the list is heavily biased towards
1140modules of the AnyEvent author himself :) 1152modules of the AnyEvent author himself :)
1141 1153
1142=over 4 1154=over 4
1143 1155
1144=item L<AnyEvent::Util> 1156=item L<AnyEvent::Util> (part of the AnyEvent distribution)
1145 1157
1146Contains various utility functions that replace often-used blocking 1158Contains various utility functions that replace often-used blocking
1147functions such as C<inet_aton> with event/callback-based versions. 1159functions such as C<inet_aton> with event/callback-based versions.
1148 1160
1149=item L<AnyEvent::Socket> 1161=item L<AnyEvent::Socket> (part of the AnyEvent distribution)
1150 1162
1151Provides various utility functions for (internet protocol) sockets, 1163Provides various utility functions for (internet protocol) sockets,
1152addresses and name resolution. Also functions to create non-blocking tcp 1164addresses and name resolution. Also functions to create non-blocking tcp
1153connections or tcp servers, with IPv6 and SRV record support and more. 1165connections or tcp servers, with IPv6 and SRV record support and more.
1154 1166
1155=item L<AnyEvent::Handle> 1167=item L<AnyEvent::Handle> (part of the AnyEvent distribution)
1156 1168
1157Provide read and write buffers, manages watchers for reads and writes, 1169Provide read and write buffers, manages watchers for reads and writes,
1158supports raw and formatted I/O, I/O queued and fully transparent and 1170supports raw and formatted I/O, I/O queued and fully transparent and
1159non-blocking SSL/TLS (via L<AnyEvent::TLS>). 1171non-blocking SSL/TLS (via L<AnyEvent::TLS>).
1160 1172
1161=item L<AnyEvent::DNS> 1173=item L<AnyEvent::DNS> (part of the AnyEvent distribution)
1162 1174
1163Provides rich asynchronous DNS resolver capabilities. 1175Provides rich asynchronous DNS resolver capabilities.
1164 1176
1165=item L<AnyEvent::HTTP>, L<AnyEvent::IRC>, L<AnyEvent::XMPP>, L<AnyEvent::GPSD>, L<AnyEvent::IGS>, L<AnyEvent::FCP> 1177=item L<AnyEvent::HTTP>, L<AnyEvent::IRC>, L<AnyEvent::XMPP>, L<AnyEvent::GPSD>, L<AnyEvent::IGS>, L<AnyEvent::FCP>
1166 1178
1167Implement event-based interfaces to the protocols of the same name (for 1179Implement event-based interfaces to the protocols of the same name (for
1168the curious, IGS is the International Go Server and FCP is the Freenet 1180the curious, IGS is the International Go Server and FCP is the Freenet
1169Client Protocol). 1181Client Protocol).
1170 1182
1171=item L<AnyEvent::AIO> 1183=item L<AnyEvent::AIO> (part of the AnyEvent distribution)
1172 1184
1173Truly asynchronous (as opposed to non-blocking) I/O, should be in the 1185Truly asynchronous (as opposed to non-blocking) I/O, should be in the
1174toolbox of every event programmer. AnyEvent::AIO transparently fuses 1186toolbox of every event programmer. AnyEvent::AIO transparently fuses
1175L<IO::AIO> and AnyEvent together, giving AnyEvent access to event-based 1187L<IO::AIO> and AnyEvent together, giving AnyEvent access to event-based
1176file I/O, and much more. 1188file I/O, and much more.
1189
1190=item L<AnyEvent::Fork>, L<AnyEvent::Fork::RPC>, L<AnyEvent::Fork::Pool>, L<AnyEvent::Fork::Remote>
1191
1192These let you safely fork new subprocesses, either locally or
1193remotely (e.g.v ia ssh), using some RPC protocol or not, without
1194the limitations normally imposed by fork (AnyEvent works fine for
1195example). Dynamically-resized worker pools are obviously included as well.
1196
1197And they are quite tiny and fast as well - "abusing" L<AnyEvent::Fork>
1198just to exec external programs can easily beat using C<fork> and C<exec>
1199(or even C<system>) in most programs.
1177 1200
1178=item L<AnyEvent::Filesys::Notify> 1201=item L<AnyEvent::Filesys::Notify>
1179 1202
1180AnyEvent is good for non-blocking stuff, but it can't detect file or 1203AnyEvent is good for non-blocking stuff, but it can't detect file or
1181path changes (e.g. "watch this directory for new files", "watch this 1204path changes (e.g. "watch this directory for new files", "watch this
1183do just that in a portbale fashion, supporting inotify on GNU/Linux and 1206do just that in a portbale fashion, supporting inotify on GNU/Linux and
1184some weird, without doubt broken, stuff on OS X to monitor files. It can 1207some weird, without doubt broken, stuff on OS X to monitor files. It can
1185fall back to blocking scans at regular intervals transparently on other 1208fall back to blocking scans at regular intervals transparently on other
1186platforms, so it's about as portable as it gets. 1209platforms, so it's about as portable as it gets.
1187 1210
1188(I haven't used it myself, but I haven't heard anybody complaining about 1211(I haven't used it myself, but it seems the biggest problem with it is
1189it yet). 1212it quite bad performance).
1190 1213
1191=item L<AnyEvent::DBI> 1214=item L<AnyEvent::DBI>
1192 1215
1193Executes L<DBI> requests asynchronously in a proxy process for you, 1216Executes L<DBI> requests asynchronously in a proxy process for you,
1194notifying you in an event-based way when the operation is finished. 1217notifying you in an event-based way when the operation is finished.
1195
1196=item L<AnyEvent::HTTPD>
1197
1198A simple embedded webserver.
1199 1218
1200=item L<AnyEvent::FastPing> 1219=item L<AnyEvent::FastPing>
1201 1220
1202The fastest ping in the west. 1221The fastest ping in the west.
1203 1222
1221 1240
1222=cut 1241=cut
1223 1242
1224package AnyEvent; 1243package AnyEvent;
1225 1244
1226# basically a tuned-down version of common::sense 1245BEGIN {
1227sub common_sense { 1246 require "AnyEvent/constants.pl";
1228 # from common:.sense 3.5 1247 &AnyEvent::common_sense;
1229 local $^W;
1230 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00";
1231 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl)
1232 $^H |= 0x00000600;
1233} 1248}
1234
1235BEGIN { AnyEvent::common_sense }
1236 1249
1237use Carp (); 1250use Carp ();
1238 1251
1239our $VERSION = '6.14'; 1252our $VERSION = '7.07';
1240our $MODEL; 1253our $MODEL;
1241our @ISA; 1254our @ISA;
1242our @REGISTRY; 1255our @REGISTRY;
1243our $VERBOSE; 1256our $VERBOSE;
1244our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred 1257our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred
1245our $MAX_SIGNAL_LATENCY = $ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY} || 10; # executes after the BEGIN block below (tainting!) 1258our $MAX_SIGNAL_LATENCY = $ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY} || 10; # executes after the BEGIN block below (tainting!)
1246 1259
1247BEGIN { 1260BEGIN {
1248 require "AnyEvent/constants.pl";
1249
1250 eval "sub TAINT (){" . (${^TAINT}*1) . "}"; 1261 eval "sub TAINT (){" . (${^TAINT}*1) . "}";
1251 1262
1252 delete @ENV{grep /^PERL_ANYEVENT_/, keys %ENV} 1263 delete @ENV{grep /^PERL_ANYEVENT_/, keys %ENV}
1253 if ${^TAINT}; 1264 if ${^TAINT};
1254 1265
1396 1407
1397 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it 1408 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it
1398 # the author knows about the problems and what it does to AnyEvent as a whole 1409 # the author knows about the problems and what it does to AnyEvent as a whole
1399 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent 1410 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent
1400 # anyway. 1411 # anyway.
1401 AnyEvent::log fatal => "AnyEvent: IO::Async::Loop::AnyEvent detected - that module is broken by\n" 1412 AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n"
1402 . "design, abuses internals and breaks AnyEvent - will not continue." 1413 . "design, abuses internals and breaks AnyEvent - will not continue."
1403 if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; 1414 if exists $INC{"IO/Async/Loop/AnyEvent.pm"};
1404 1415
1405 local $!; # for good measure 1416 local $!; # for good measure
1406 local $SIG{__DIE__}; # we use eval 1417 local $SIG{__DIE__}; # we use eval
1417 1428
1418 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { 1429 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
1419 my $model = $1; 1430 my $model = $1;
1420 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; 1431 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//;
1421 if (eval "require $model") { 1432 if (eval "require $model") {
1422 AnyEvent::log 7 => "loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it."; 1433 AnyEvent::log 7 => "Loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it.";
1423 $MODEL = $model; 1434 $MODEL = $model;
1424 } else { 1435 } else {
1425 AnyEvent::log 4 => "unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@"; 1436 AnyEvent::log 4 => "Unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@";
1426 } 1437 }
1427 } 1438 }
1428 1439
1429 # check for already loaded models 1440 # check for already loaded models
1430 unless ($MODEL) { 1441 unless ($MODEL) {
1431 for (@REGISTRY, @models) { 1442 for (@REGISTRY, @models) {
1432 my ($package, $model) = @$_; 1443 my ($package, $model) = @$_;
1433 if (${"$package\::VERSION"} > 0) { 1444 if (${"$package\::VERSION"} > 0) {
1434 if (eval "require $model") { 1445 if (eval "require $model") {
1435 AnyEvent::log 7 => "autodetected model '$model', using it."; 1446 AnyEvent::log 7 => "Autodetected model '$model', using it.";
1436 $MODEL = $model; 1447 $MODEL = $model;
1437 last; 1448 last;
1438 } else { 1449 } else {
1439 AnyEvent::log 8 => "detected event loop $package, but cannot load '$model', skipping: $@"; 1450 AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@";
1440 } 1451 }
1441 } 1452 }
1442 } 1453 }
1443 1454
1444 unless ($MODEL) { 1455 unless ($MODEL) {
1448 if ( 1459 if (
1449 eval "require $package" 1460 eval "require $package"
1450 and ${"$package\::VERSION"} > 0 1461 and ${"$package\::VERSION"} > 0
1451 and eval "require $model" 1462 and eval "require $model"
1452 ) { 1463 ) {
1453 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1464 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1454 $MODEL = $model; 1465 $MODEL = $model;
1455 last; 1466 last;
1456 } 1467 }
1457 } 1468 }
1458 1469
1459 $MODEL 1470 $MODEL
1460 or AnyEvent::log fatal => "AnyEvent: backend autodetection failed - did you properly install AnyEvent?"; 1471 or AnyEvent::log fatal => "Backend autodetection failed - did you properly install AnyEvent?";
1461 } 1472 }
1462 } 1473 }
1463 1474
1464 # free memory only needed for probing 1475 # free memory only needed for probing
1465 undef @models; 1476 undef @models;
1612 # probe for availability of Time::HiRes 1623 # probe for availability of Time::HiRes
1613 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1624 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1614 *time = sub { Time::HiRes::time () }; 1625 *time = sub { Time::HiRes::time () };
1615 *AE::time = \& Time::HiRes::time ; 1626 *AE::time = \& Time::HiRes::time ;
1616 *now = \&time; 1627 *now = \&time;
1617 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1628 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1618 # if (eval "use POSIX (); (POSIX::times())... 1629 # if (eval "use POSIX (); (POSIX::times())...
1619 } else { 1630 } else {
1620 *time = sub { CORE::time }; 1631 *time = sub { CORE::time };
1621 *AE::time = sub (){ CORE::time }; 1632 *AE::time = sub (){ CORE::time };
1622 *now = \&time; 1633 *now = \&time;
1623 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1634 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1624 } 1635 }
1625 }; 1636 };
1626 die if $@; 1637 die if $@;
1627 1638
1628 &time 1639 &time
1722 1733
1723sub signal { 1734sub signal {
1724 eval q{ # poor man's autoloading {} 1735 eval q{ # poor man's autoloading {}
1725 # probe for availability of Async::Interrupt 1736 # probe for availability of Async::Interrupt
1726 if (_have_async_interrupt) { 1737 if (_have_async_interrupt) {
1727 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1738 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1728 1739
1729 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1740 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1730 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1741 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1731 1742
1732 } else { 1743 } else {
1733 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1744 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1734 1745
1735 if (AnyEvent::WIN32) { 1746 if (AnyEvent::WIN32) {
1736 require AnyEvent::Util; 1747 require AnyEvent::Util;
1737 1748
1738 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1749 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2177 2188
2178For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you 2189For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you
2179could start your program like this: 2190could start your program like this:
2180 2191
2181 PERL_ANYEVENT_MODEL=Perl perl ... 2192 PERL_ANYEVENT_MODEL=Perl perl ...
2193
2194=item C<PERL_ANYEVENT_IO_MODEL>
2195
2196The current file I/O model - see L<AnyEvent::IO> for more info.
2197
2198At the moment, only C<Perl> (small, pure-perl, synchronous) and
2199C<IOAIO> (truly asynchronous) are supported. The default is C<IOAIO> if
2200L<AnyEvent::AIO> can be loaded, otherwise it is C<Perl>.
2182 2201
2183=item C<PERL_ANYEVENT_PROTOCOLS> 2202=item C<PERL_ANYEVENT_PROTOCOLS>
2184 2203
2185Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences 2204Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences
2186for IPv4 or IPv6. The default is unspecified (and might change, or be the result 2205for IPv4 or IPv6. The default is unspecified (and might change, or be the result
2913This module is part of perl since release 5.008. It will be used when the 2932This module is part of perl since release 5.008. It will be used when the
2914chosen event library does not come with a timing source of its own. The 2933chosen event library does not come with a timing source of its own. The
2915pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to 2934pure-perl event loop (L<AnyEvent::Loop>) will additionally load it to
2916try to use a monotonic clock for timing stability. 2935try to use a monotonic clock for timing stability.
2917 2936
2937=item L<AnyEvent::AIO> (and L<IO::AIO>)
2938
2939The default implementation of L<AnyEvent::IO> is to do I/O synchronously,
2940stopping programs while they access the disk, which is fine for a lot of
2941programs.
2942
2943Installing AnyEvent::AIO (and its IO::AIO dependency) makes it switch to
2944a true asynchronous implementation, so event processing can continue even
2945while waiting for disk I/O.
2946
2918=back 2947=back
2919 2948
2920 2949
2921=head1 FORK 2950=head1 FORK
2922 2951
2933usually happens when the first AnyEvent watcher is created, or the library 2962usually happens when the first AnyEvent watcher is created, or the library
2934is loaded). 2963is loaded).
2935 2964
2936If you have to fork, you must either do so I<before> creating your first 2965If you have to fork, you must either do so I<before> creating your first
2937watcher OR you must not use AnyEvent at all in the child OR you must do 2966watcher OR you must not use AnyEvent at all in the child OR you must do
2938something completely out of the scope of AnyEvent. 2967something completely out of the scope of AnyEvent (see below).
2939 2968
2940The problem of doing event processing in the parent I<and> the child 2969The problem of doing event processing in the parent I<and> the child
2941is much more complicated: even for backends that I<are> fork-aware or 2970is much more complicated: even for backends that I<are> fork-aware or
2942fork-safe, their behaviour is not usually what you want: fork clones all 2971fork-safe, their behaviour is not usually what you want: fork clones all
2943watchers, that means all timers, I/O watchers etc. are active in both 2972watchers, that means all timers, I/O watchers etc. are active in both
2944parent and child, which is almost never what you want. USing C<exec> 2973parent and child, which is almost never what you want. Using C<exec>
2945to start worker children from some kind of manage rprocess is usually 2974to start worker children from some kind of manage prrocess is usually
2946preferred, because it is much easier and cleaner, at the expense of having 2975preferred, because it is much easier and cleaner, at the expense of having
2947to have another binary. 2976to have another binary.
2977
2978In addition to logical problems with fork, there are also implementation
2979problems. For example, on POSIX systems, you cannot fork at all in Perl
2980code if a thread (I am talking of pthreads here) was ever created in the
2981process, and this is just the tip of the iceberg. In general, using fork
2982from Perl is difficult, and attempting to use fork without an exec to
2983implement some kind of parallel processing is almost certainly doomed.
2984
2985To safely fork and exec, you should use a module such as
2986L<Proc::FastSpawn> that let's you safely fork and exec new processes.
2987
2988If you want to do multiprocessing using processes, you can
2989look at the L<AnyEvent::Fork> module (and some related modules
2990such as L<AnyEvent::Fork::RPC>, L<AnyEvent::Fork::Pool> and
2991L<AnyEvent::Fork::Remote>). This module allows you to safely create
2992subprocesses without any limitations - you can use X11 toolkits or
2993AnyEvent in the children created by L<AnyEvent::Fork> safely and without
2994any special precautions.
2948 2995
2949 2996
2950=head1 SECURITY CONSIDERATIONS 2997=head1 SECURITY CONSIDERATIONS
2951 2998
2952AnyEvent can be forced to load any event model via 2999AnyEvent can be forced to load any event model via
3005L<AnyEvent::Impl::FLTK>. 3052L<AnyEvent::Impl::FLTK>.
3006 3053
3007Non-blocking handles, pipes, stream sockets, TCP clients and 3054Non-blocking handles, pipes, stream sockets, TCP clients and
3008servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3055servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3009 3056
3057Asynchronous File I/O: L<AnyEvent::IO>.
3058
3010Asynchronous DNS: L<AnyEvent::DNS>. 3059Asynchronous DNS: L<AnyEvent::DNS>.
3011 3060
3012Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>. 3061Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>.
3013 3062
3014Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3063Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3016 3065
3017 3066
3018=head1 AUTHOR 3067=head1 AUTHOR
3019 3068
3020 Marc Lehmann <schmorp@schmorp.de> 3069 Marc Lehmann <schmorp@schmorp.de>
3021 http://home.schmorp.de/ 3070 http://anyevent.schmorp.de
3022 3071
3023=cut 3072=cut
3024 3073
30251 30741
3026 3075

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines