| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | =head1 NAME | 
| 2 |  |  |  |  |  |  |  | 
| 3 |  |  |  |  |  |  | AnyEvent - the DBI of event loop programming | 
| 4 |  |  |  |  |  |  |  | 
| 5 |  |  |  |  |  |  | EV, Event, Glib, Tk, UV, Perl, Event::Lib, Irssi, rxvt-unicode, IO::Async, | 
| 6 |  |  |  |  |  |  | Qt, FLTK and POE are various supported event loops/environments. | 
| 7 |  |  |  |  |  |  |  | 
| 8 |  |  |  |  |  |  | =head1 SYNOPSIS | 
| 9 |  |  |  |  |  |  |  | 
| 10 |  |  |  |  |  |  | use AnyEvent; | 
| 11 |  |  |  |  |  |  |  | 
| 12 |  |  |  |  |  |  | # if you prefer function calls, look at the AE manpage for | 
| 13 |  |  |  |  |  |  | # an alternative API. | 
| 14 |  |  |  |  |  |  |  | 
| 15 |  |  |  |  |  |  | # file handle or descriptor readable | 
| 16 |  |  |  |  |  |  | my $w = AnyEvent->io (fh => $fh, poll => "r", cb => sub { ...  }); | 
| 17 |  |  |  |  |  |  |  | 
| 18 |  |  |  |  |  |  | # one-shot or repeating timers | 
| 19 |  |  |  |  |  |  | my $w = AnyEvent->timer (after => $seconds, cb => sub { ...  }); | 
| 20 |  |  |  |  |  |  | my $w = AnyEvent->timer (after => $seconds, interval => $seconds, cb => ...); | 
| 21 |  |  |  |  |  |  |  | 
| 22 |  |  |  |  |  |  | print AnyEvent->now;  # prints current event loop time | 
| 23 |  |  |  |  |  |  | print AnyEvent->time; # think Time::HiRes::time or simply CORE::time. | 
| 24 |  |  |  |  |  |  |  | 
| 25 |  |  |  |  |  |  | # POSIX signal | 
| 26 |  |  |  |  |  |  | my $w = AnyEvent->signal (signal => "TERM", cb => sub { ... }); | 
| 27 |  |  |  |  |  |  |  | 
| 28 |  |  |  |  |  |  | # child process exit | 
| 29 |  |  |  |  |  |  | my $w = AnyEvent->child (pid => $pid, cb => sub { | 
| 30 |  |  |  |  |  |  | my ($pid, $status) = @_; | 
| 31 |  |  |  |  |  |  | ... | 
| 32 |  |  |  |  |  |  | }); | 
| 33 |  |  |  |  |  |  |  | 
| 34 |  |  |  |  |  |  | # called when event loop idle (if applicable) | 
| 35 |  |  |  |  |  |  | my $w = AnyEvent->idle (cb => sub { ... }); | 
| 36 |  |  |  |  |  |  |  | 
| 37 |  |  |  |  |  |  | my $w = AnyEvent->condvar; # stores whether a condition was flagged | 
| 38 |  |  |  |  |  |  | $w->send; # wake up current and all future recv's | 
| 39 |  |  |  |  |  |  | $w->recv; # enters "main loop" till $condvar gets ->send | 
| 40 |  |  |  |  |  |  | # use a condvar in callback mode: | 
| 41 |  |  |  |  |  |  | $w->cb (sub { $_[0]->recv }); | 
| 42 |  |  |  |  |  |  |  | 
| 43 |  |  |  |  |  |  | =head1 INTRODUCTION/TUTORIAL | 
| 44 |  |  |  |  |  |  |  | 
| 45 |  |  |  |  |  |  | This manpage is mainly a reference manual. If you are interested | 
| 46 |  |  |  |  |  |  | in a tutorial or some gentle introduction, have a look at the | 
| 47 |  |  |  |  |  |  | L manpage. | 
| 48 |  |  |  |  |  |  |  | 
| 49 |  |  |  |  |  |  | =head1 SUPPORT | 
| 50 |  |  |  |  |  |  |  | 
| 51 |  |  |  |  |  |  | An FAQ document is available as L. | 
| 52 |  |  |  |  |  |  |  | 
| 53 |  |  |  |  |  |  | There also is a mailinglist for discussing all things AnyEvent, and an IRC | 
| 54 |  |  |  |  |  |  | channel, too. | 
| 55 |  |  |  |  |  |  |  | 
| 56 |  |  |  |  |  |  | See the AnyEvent project page at the B | 
| 57 |  |  |  |  |  |  | Repository>, at L, for more info. | 
| 58 |  |  |  |  |  |  |  | 
| 59 |  |  |  |  |  |  | =head1 WHY YOU SHOULD USE THIS MODULE (OR NOT) | 
| 60 |  |  |  |  |  |  |  | 
| 61 |  |  |  |  |  |  | Glib, POE, IO::Async, Event... CPAN offers event models by the dozen | 
| 62 |  |  |  |  |  |  | nowadays. So what is different about AnyEvent? | 
| 63 |  |  |  |  |  |  |  | 
| 64 |  |  |  |  |  |  | Executive Summary: AnyEvent is I, AnyEvent is I | 
| 65 |  |  |  |  |  |  | policy> and AnyEvent is I. | 
| 66 |  |  |  |  |  |  |  | 
| 67 |  |  |  |  |  |  | First and foremost, I itself, it only | 
| 68 |  |  |  |  |  |  | interfaces to whatever event model the main program happens to use, in a | 
| 69 |  |  |  |  |  |  | pragmatic way. For event models and certain classes of immortals alike, | 
| 70 |  |  |  |  |  |  | the statement "there can only be one" is a bitter reality: In general, | 
| 71 |  |  |  |  |  |  | only one event loop can be active at the same time in a process. AnyEvent | 
| 72 |  |  |  |  |  |  | cannot change this, but it can hide the differences between those event | 
| 73 |  |  |  |  |  |  | loops. | 
| 74 |  |  |  |  |  |  |  | 
| 75 |  |  |  |  |  |  | The goal of AnyEvent is to offer module authors the ability to do event | 
| 76 |  |  |  |  |  |  | programming (waiting for I/O or timer events) without subscribing to a | 
| 77 |  |  |  |  |  |  | religion, a way of living, and most importantly: without forcing your | 
| 78 |  |  |  |  |  |  | module users into the same thing by forcing them to use the same event | 
| 79 |  |  |  |  |  |  | model you use. | 
| 80 |  |  |  |  |  |  |  | 
| 81 |  |  |  |  |  |  | For modules like POE or IO::Async (which is a total misnomer as it is | 
| 82 |  |  |  |  |  |  | actually doing all I/O I...), using them in your module is | 
| 83 |  |  |  |  |  |  | like joining a cult: After you join, you are dependent on them and you | 
| 84 |  |  |  |  |  |  | cannot use anything else, as they are simply incompatible to everything | 
| 85 |  |  |  |  |  |  | that isn't them. What's worse, all the potential users of your | 
| 86 |  |  |  |  |  |  | module are I forced to use the same event loop you use. | 
| 87 |  |  |  |  |  |  |  | 
| 88 |  |  |  |  |  |  | AnyEvent is different: AnyEvent + POE works fine. AnyEvent + Glib works | 
| 89 |  |  |  |  |  |  | fine. AnyEvent + Tk works fine etc. etc. but none of these work together | 
| 90 |  |  |  |  |  |  | with the rest: POE + EV? No go. Tk + Event? No go. Again: if your module | 
| 91 |  |  |  |  |  |  | uses one of those, every user of your module has to use it, too. But if | 
| 92 |  |  |  |  |  |  | your module uses AnyEvent, it works transparently with all event models it | 
| 93 |  |  |  |  |  |  | supports (including stuff like IO::Async, as long as those use one of the | 
| 94 |  |  |  |  |  |  | supported event loops. It is easy to add new event loops to AnyEvent, too, | 
| 95 |  |  |  |  |  |  | so it is future-proof). | 
| 96 |  |  |  |  |  |  |  | 
| 97 |  |  |  |  |  |  | In addition to being free of having to use I | 
| 98 |  |  |  |  |  |  | model>, AnyEvent also is free of bloat and policy: with POE or similar | 
| 99 |  |  |  |  |  |  | modules, you get an enormous amount of code and strict rules you have to | 
| 100 |  |  |  |  |  |  | follow. AnyEvent, on the other hand, is lean and to the point, by only | 
| 101 |  |  |  |  |  |  | offering the functionality that is necessary, in as thin as a wrapper as | 
| 102 |  |  |  |  |  |  | technically possible. | 
| 103 |  |  |  |  |  |  |  | 
| 104 |  |  |  |  |  |  | Of course, AnyEvent comes with a big (and fully optional!) toolbox | 
| 105 |  |  |  |  |  |  | of useful functionality, such as an asynchronous DNS resolver, 100% | 
| 106 |  |  |  |  |  |  | non-blocking connects (even with TLS/SSL, IPv6 and on broken platforms | 
| 107 |  |  |  |  |  |  | such as Windows) and lots of real-world knowledge and workarounds for | 
| 108 |  |  |  |  |  |  | platform bugs and differences. | 
| 109 |  |  |  |  |  |  |  | 
| 110 |  |  |  |  |  |  | Now, if you I lots of policy (this can arguably be somewhat | 
| 111 |  |  |  |  |  |  | useful) and you want to force your users to use the one and only event | 
| 112 |  |  |  |  |  |  | model, you should I use this module. | 
| 113 |  |  |  |  |  |  |  | 
| 114 |  |  |  |  |  |  | =head1 DESCRIPTION | 
| 115 |  |  |  |  |  |  |  | 
| 116 |  |  |  |  |  |  | L provides a uniform interface to various event loops. This | 
| 117 |  |  |  |  |  |  | allows module authors to use event loop functionality without forcing | 
| 118 |  |  |  |  |  |  | module users to use a specific event loop implementation (since more | 
| 119 |  |  |  |  |  |  | than one event loop cannot coexist peacefully). | 
| 120 |  |  |  |  |  |  |  | 
| 121 |  |  |  |  |  |  | The interface itself is vaguely similar, but not identical to the L | 
| 122 |  |  |  |  |  |  | module. | 
| 123 |  |  |  |  |  |  |  | 
| 124 |  |  |  |  |  |  | During the first call of any watcher-creation method, the module tries | 
| 125 |  |  |  |  |  |  | to detect the currently loaded event loop by probing whether one of the | 
| 126 |  |  |  |  |  |  | following modules is already loaded: L, L, | 
| 127 |  |  |  |  |  |  | L, L, L, L, L, L. The first one | 
| 128 |  |  |  |  |  |  | found is used. If none are detected, the module tries to load the first | 
| 129 |  |  |  |  |  |  | four modules in the order given; but note that if L is not | 
| 130 |  |  |  |  |  |  | available, the pure-perl L should always work, so | 
| 131 |  |  |  |  |  |  | the other two are not normally tried. | 
| 132 |  |  |  |  |  |  |  | 
| 133 |  |  |  |  |  |  | Because AnyEvent first checks for modules that are already loaded, loading | 
| 134 |  |  |  |  |  |  | an event model explicitly before first using AnyEvent will likely make | 
| 135 |  |  |  |  |  |  | that model the default. For example: | 
| 136 |  |  |  |  |  |  |  | 
| 137 |  |  |  |  |  |  | use Tk; | 
| 138 |  |  |  |  |  |  | use AnyEvent; | 
| 139 |  |  |  |  |  |  |  | 
| 140 |  |  |  |  |  |  | # .. AnyEvent will likely default to Tk | 
| 141 |  |  |  |  |  |  |  | 
| 142 |  |  |  |  |  |  | The I means that, if any module loads another event model and | 
| 143 |  |  |  |  |  |  | starts using it, all bets are off - this case should be very rare though, | 
| 144 |  |  |  |  |  |  | as very few modules hardcode event loops without announcing this very | 
| 145 |  |  |  |  |  |  | loudly. | 
| 146 |  |  |  |  |  |  |  | 
| 147 |  |  |  |  |  |  | The pure-perl implementation of AnyEvent is called C. Like | 
| 148 |  |  |  |  |  |  | other event modules you can load it explicitly and enjoy the high | 
| 149 |  |  |  |  |  |  | availability of that event loop :) | 
| 150 |  |  |  |  |  |  |  | 
| 151 |  |  |  |  |  |  | =head1 WATCHERS | 
| 152 |  |  |  |  |  |  |  | 
| 153 |  |  |  |  |  |  | AnyEvent has the central concept of a I, which is an object that | 
| 154 |  |  |  |  |  |  | stores relevant data for each kind of event you are waiting for, such as | 
| 155 |  |  |  |  |  |  | the callback to call, the file handle to watch, etc. | 
| 156 |  |  |  |  |  |  |  | 
| 157 |  |  |  |  |  |  | These watchers are normal Perl objects with normal Perl lifetime. After | 
| 158 |  |  |  |  |  |  | creating a watcher it will immediately "watch" for events and invoke the | 
| 159 |  |  |  |  |  |  | callback when the event occurs (of course, only when the event model | 
| 160 |  |  |  |  |  |  | is in control). | 
| 161 |  |  |  |  |  |  |  | 
| 162 |  |  |  |  |  |  | Note that B | 
| 163 |  |  |  |  |  |  | potentially in use by the event loop (such as C<$_> or C<$[>) and that B<< | 
| 164 |  |  |  |  |  |  | callbacks must not C >>. The former is good programming practice in | 
| 165 |  |  |  |  |  |  | Perl and the latter stems from the fact that exception handling differs | 
| 166 |  |  |  |  |  |  | widely between event loops. | 
| 167 |  |  |  |  |  |  |  | 
| 168 |  |  |  |  |  |  | To disable a watcher you have to destroy it (e.g. by setting the | 
| 169 |  |  |  |  |  |  | variable you store it in to C or otherwise deleting all references | 
| 170 |  |  |  |  |  |  | to it). | 
| 171 |  |  |  |  |  |  |  | 
| 172 |  |  |  |  |  |  | All watchers are created by calling a method on the C class. | 
| 173 |  |  |  |  |  |  |  | 
| 174 |  |  |  |  |  |  | Many watchers either are used with "recursion" (repeating timers for | 
| 175 |  |  |  |  |  |  | example), or need to refer to their watcher object in other ways. | 
| 176 |  |  |  |  |  |  |  | 
| 177 |  |  |  |  |  |  | One way to achieve that is this pattern: | 
| 178 |  |  |  |  |  |  |  | 
| 179 |  |  |  |  |  |  | my $w; $w = AnyEvent->type (arg => value ..., cb => sub { | 
| 180 |  |  |  |  |  |  | # you can use $w here, for example to undef it | 
| 181 |  |  |  |  |  |  | undef $w; | 
| 182 |  |  |  |  |  |  | }); | 
| 183 |  |  |  |  |  |  |  | 
| 184 |  |  |  |  |  |  | Note that C combination. This is necessary because in Perl, | 
| 185 |  |  |  |  |  |  | my variables are only visible after the statement in which they are | 
| 186 |  |  |  |  |  |  | declared. | 
| 187 |  |  |  |  |  |  |  | 
| 188 |  |  |  |  |  |  | =head2 I/O WATCHERS | 
| 189 |  |  |  |  |  |  |  | 
| 190 |  |  |  |  |  |  | $w = AnyEvent->io ( | 
| 191 |  |  |  |  |  |  | fh   => , | 
| 192 |  |  |  |  |  |  | poll => <"r" or "w">, | 
| 193 |  |  |  |  |  |  | cb   => , | 
| 194 |  |  |  |  |  |  | ); | 
| 195 |  |  |  |  |  |  |  | 
| 196 |  |  |  |  |  |  | You can create an I/O watcher by calling the C<< AnyEvent->io >> method | 
| 197 |  |  |  |  |  |  | with the following mandatory key-value pairs as arguments: | 
| 198 |  |  |  |  |  |  |  | 
| 199 |  |  |  |  |  |  | C is the Perl I (or a naked file descriptor) to watch | 
| 200 |  |  |  |  |  |  | for events (AnyEvent might or might not keep a reference to this file | 
| 201 |  |  |  |  |  |  | handle). Note that only file handles pointing to things for which | 
| 202 |  |  |  |  |  |  | non-blocking operation makes sense are allowed. This includes sockets, | 
| 203 |  |  |  |  |  |  | most character devices, pipes, fifos and so on, but not for example files | 
| 204 |  |  |  |  |  |  | or block devices. | 
| 205 |  |  |  |  |  |  |  | 
| 206 |  |  |  |  |  |  | C must be a string that is either C or C, which creates a | 
| 207 |  |  |  |  |  |  | watcher waiting for "r"eadable or "w"ritable events, respectively. | 
| 208 |  |  |  |  |  |  |  | 
| 209 |  |  |  |  |  |  | C is the callback to invoke each time the file handle becomes ready. | 
| 210 |  |  |  |  |  |  |  | 
| 211 |  |  |  |  |  |  | Although the callback might get passed parameters, their value and | 
| 212 |  |  |  |  |  |  | presence is undefined and you cannot rely on them. Portable AnyEvent | 
| 213 |  |  |  |  |  |  | callbacks cannot use arguments passed to I/O watcher callbacks. | 
| 214 |  |  |  |  |  |  |  | 
| 215 |  |  |  |  |  |  | The I/O watcher might use the underlying file descriptor or a copy of it. | 
| 216 |  |  |  |  |  |  | You must not close a file handle as long as any watcher is active on the | 
| 217 |  |  |  |  |  |  | underlying file descriptor. | 
| 218 |  |  |  |  |  |  |  | 
| 219 |  |  |  |  |  |  | Some event loops issue spurious readiness notifications, so you should | 
| 220 |  |  |  |  |  |  | always use non-blocking calls when reading/writing from/to your file | 
| 221 |  |  |  |  |  |  | handles. | 
| 222 |  |  |  |  |  |  |  | 
| 223 |  |  |  |  |  |  | Example: wait for readability of STDIN, then read a line and disable the | 
| 224 |  |  |  |  |  |  | watcher. | 
| 225 |  |  |  |  |  |  |  | 
| 226 |  |  |  |  |  |  | my $w; $w = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub { | 
| 227 |  |  |  |  |  |  | chomp (my $input = ); | 
| 228 |  |  |  |  |  |  | warn "read: $input\n"; | 
| 229 |  |  |  |  |  |  | undef $w; | 
| 230 |  |  |  |  |  |  | }); | 
| 231 |  |  |  |  |  |  |  | 
| 232 |  |  |  |  |  |  | =head2 TIME WATCHERS | 
| 233 |  |  |  |  |  |  |  | 
| 234 |  |  |  |  |  |  | $w = AnyEvent->timer (after => , cb => ); | 
| 235 |  |  |  |  |  |  |  | 
| 236 |  |  |  |  |  |  | $w = AnyEvent->timer ( | 
| 237 |  |  |  |  |  |  | after    => , | 
| 238 |  |  |  |  |  |  | interval => , | 
| 239 |  |  |  |  |  |  | cb       => , | 
| 240 |  |  |  |  |  |  | ); | 
| 241 |  |  |  |  |  |  |  | 
| 242 |  |  |  |  |  |  | You can create a time watcher by calling the C<< AnyEvent->timer >> | 
| 243 |  |  |  |  |  |  | method with the following mandatory arguments: | 
| 244 |  |  |  |  |  |  |  | 
| 245 |  |  |  |  |  |  | C specifies after how many seconds (fractional values are | 
| 246 |  |  |  |  |  |  | supported) the callback should be invoked. C is the callback to invoke | 
| 247 |  |  |  |  |  |  | in that case. | 
| 248 |  |  |  |  |  |  |  | 
| 249 |  |  |  |  |  |  | Although the callback might get passed parameters, their value and | 
| 250 |  |  |  |  |  |  | presence is undefined and you cannot rely on them. Portable AnyEvent | 
| 251 |  |  |  |  |  |  | callbacks cannot use arguments passed to time watcher callbacks. | 
| 252 |  |  |  |  |  |  |  | 
| 253 |  |  |  |  |  |  | The callback will normally be invoked only once. If you specify another | 
| 254 |  |  |  |  |  |  | parameter, C, as a strictly positive number (> 0), then the | 
| 255 |  |  |  |  |  |  | callback will be invoked regularly at that interval (in fractional | 
| 256 |  |  |  |  |  |  | seconds) after the first invocation. If C is specified with a | 
| 257 |  |  |  |  |  |  | false value, then it is treated as if it were not specified at all. | 
| 258 |  |  |  |  |  |  |  | 
| 259 |  |  |  |  |  |  | The callback will be rescheduled before invoking the callback, but no | 
| 260 |  |  |  |  |  |  | attempt is made to avoid timer drift in most backends, so the interval is | 
| 261 |  |  |  |  |  |  | only approximate. | 
| 262 |  |  |  |  |  |  |  | 
| 263 |  |  |  |  |  |  | Example: fire an event after 7.7 seconds. | 
| 264 |  |  |  |  |  |  |  | 
| 265 |  |  |  |  |  |  | my $w = AnyEvent->timer (after => 7.7, cb => sub { | 
| 266 |  |  |  |  |  |  | warn "timeout\n"; | 
| 267 |  |  |  |  |  |  | }); | 
| 268 |  |  |  |  |  |  |  | 
| 269 |  |  |  |  |  |  | # to cancel the timer: | 
| 270 |  |  |  |  |  |  | undef $w; | 
| 271 |  |  |  |  |  |  |  | 
| 272 |  |  |  |  |  |  | Example 2: fire an event after 0.5 seconds, then roughly every second. | 
| 273 |  |  |  |  |  |  |  | 
| 274 |  |  |  |  |  |  | my $w = AnyEvent->timer (after => 0.5, interval => 1, cb => sub { | 
| 275 |  |  |  |  |  |  | warn "timeout\n"; | 
| 276 |  |  |  |  |  |  | }); | 
| 277 |  |  |  |  |  |  |  | 
| 278 |  |  |  |  |  |  | =head3 TIMING ISSUES | 
| 279 |  |  |  |  |  |  |  | 
| 280 |  |  |  |  |  |  | There are two ways to handle timers: based on real time (relative, "fire | 
| 281 |  |  |  |  |  |  | in 10 seconds") and based on wallclock time (absolute, "fire at 12 | 
| 282 |  |  |  |  |  |  | o'clock"). | 
| 283 |  |  |  |  |  |  |  | 
| 284 |  |  |  |  |  |  | While most event loops expect timers to specified in a relative way, they | 
| 285 |  |  |  |  |  |  | use absolute time internally. This makes a difference when your clock | 
| 286 |  |  |  |  |  |  | "jumps", for example, when ntp decides to set your clock backwards from | 
| 287 |  |  |  |  |  |  | the wrong date of 2014-01-01 to 2008-01-01, a watcher that is supposed to | 
| 288 |  |  |  |  |  |  | fire "after a second" might actually take six years to finally fire. | 
| 289 |  |  |  |  |  |  |  | 
| 290 |  |  |  |  |  |  | AnyEvent cannot compensate for this. The only event loop that is conscious | 
| 291 |  |  |  |  |  |  | of these issues is L, which offers both relative (ev_timer, based | 
| 292 |  |  |  |  |  |  | on true relative time) and absolute (ev_periodic, based on wallclock time) | 
| 293 |  |  |  |  |  |  | timers. | 
| 294 |  |  |  |  |  |  |  | 
| 295 |  |  |  |  |  |  | AnyEvent always prefers relative timers, if available, matching the | 
| 296 |  |  |  |  |  |  | AnyEvent API. | 
| 297 |  |  |  |  |  |  |  | 
| 298 |  |  |  |  |  |  | AnyEvent has two additional methods that return the "current time": | 
| 299 |  |  |  |  |  |  |  | 
| 300 |  |  |  |  |  |  | =over 4 | 
| 301 |  |  |  |  |  |  |  | 
| 302 |  |  |  |  |  |  | =item AnyEvent->time | 
| 303 |  |  |  |  |  |  |  | 
| 304 |  |  |  |  |  |  | This returns the "current wallclock time" as a fractional number of | 
| 305 |  |  |  |  |  |  | seconds since the Epoch (the same thing as C | 
| 306 |  |  |  |  |  |  | return, and the result is guaranteed to be compatible with those). | 
| 307 |  |  |  |  |  |  |  | 
| 308 |  |  |  |  |  |  | It progresses independently of any event loop processing, i.e. each call | 
| 309 |  |  |  |  |  |  | will check the system clock, which usually gets updated frequently. | 
| 310 |  |  |  |  |  |  |  | 
| 311 |  |  |  |  |  |  | =item AnyEvent->now | 
| 312 |  |  |  |  |  |  |  | 
| 313 |  |  |  |  |  |  | This also returns the "current wallclock time", but unlike C | 
| 314 |  |  |  |  |  |  | this value might change only once per event loop iteration, depending on | 
| 315 |  |  |  |  |  |  | the event loop (most return the same time as C | 
| 316 |  |  |  |  |  |  | time that AnyEvent's timers get scheduled against. | 
| 317 |  |  |  |  |  |  |  | 
| 318 |  |  |  |  |  |  | I | 
| 319 |  |  |  |  |  |  | function to call when you want to know the current time.> | 
| 320 |  |  |  |  |  |  |  | 
| 321 |  |  |  |  |  |  | This function is also often faster then C<< AnyEvent->time >>, and | 
| 322 |  |  |  |  |  |  | thus the preferred method if you want some timestamp (for example, | 
| 323 |  |  |  |  |  |  | L uses this to update its activity timeouts). | 
| 324 |  |  |  |  |  |  |  | 
| 325 |  |  |  |  |  |  | The rest of this section is only of relevance if you try to be very exact | 
| 326 |  |  |  |  |  |  | with your timing; you can skip it without a bad conscience. | 
| 327 |  |  |  |  |  |  |  | 
| 328 |  |  |  |  |  |  | For a practical example of when these times differ, consider L | 
| 329 |  |  |  |  |  |  | and L and the following set-up: | 
| 330 |  |  |  |  |  |  |  | 
| 331 |  |  |  |  |  |  | The event loop is running and has just invoked one of your callbacks at | 
| 332 |  |  |  |  |  |  | time=500 (assume no other callbacks delay processing). In your callback, | 
| 333 |  |  |  |  |  |  | you wait a second by executing C (blocking the process for a | 
| 334 |  |  |  |  |  |  | second) and then (at time=501) you create a relative timer that fires | 
| 335 |  |  |  |  |  |  | after three seconds. | 
| 336 |  |  |  |  |  |  |  | 
| 337 |  |  |  |  |  |  | With L, C<< AnyEvent->time >> and C<< AnyEvent->now >> will | 
| 338 |  |  |  |  |  |  | both return C<501>, because that is the current time, and the timer will | 
| 339 |  |  |  |  |  |  | be scheduled to fire at time=504 (C<501> + C<3>). | 
| 340 |  |  |  |  |  |  |  | 
| 341 |  |  |  |  |  |  | With L, C<< AnyEvent->time >> returns C<501> (as that is the current | 
| 342 |  |  |  |  |  |  | time), but C<< AnyEvent->now >> returns C<500>, as that is the time the | 
| 343 |  |  |  |  |  |  | last event processing phase started. With L, your timer gets scheduled | 
| 344 |  |  |  |  |  |  | to run at time=503 (C<500> + C<3>). | 
| 345 |  |  |  |  |  |  |  | 
| 346 |  |  |  |  |  |  | In one sense, L is more exact, as it uses the current time | 
| 347 |  |  |  |  |  |  | regardless of any delays introduced by event processing. However, most | 
| 348 |  |  |  |  |  |  | callbacks do not expect large delays in processing, so this causes a | 
| 349 |  |  |  |  |  |  | higher drift (and a lot more system calls to get the current time). | 
| 350 |  |  |  |  |  |  |  | 
| 351 |  |  |  |  |  |  | In another sense, L is more exact, as your timer will be scheduled at | 
| 352 |  |  |  |  |  |  | the same time, regardless of how long event processing actually took. | 
| 353 |  |  |  |  |  |  |  | 
| 354 |  |  |  |  |  |  | In either case, if you care (and in most cases, you don't), then you | 
| 355 |  |  |  |  |  |  | can get whatever behaviour you want with any event loop, by taking the | 
| 356 |  |  |  |  |  |  | difference between C<< AnyEvent->time >> and C<< AnyEvent->now >> into | 
| 357 |  |  |  |  |  |  | account. | 
| 358 |  |  |  |  |  |  |  | 
| 359 |  |  |  |  |  |  | =item AnyEvent->now_update | 
| 360 |  |  |  |  |  |  |  | 
| 361 |  |  |  |  |  |  | Some event loops (such as L or L) cache the current | 
| 362 |  |  |  |  |  |  | time for each loop iteration (see the discussion of L<< AnyEvent->now >>, | 
| 363 |  |  |  |  |  |  | above). | 
| 364 |  |  |  |  |  |  |  | 
| 365 |  |  |  |  |  |  | When a callback runs for a long time (or when the process sleeps), then | 
| 366 |  |  |  |  |  |  | this "current" time will differ substantially from the real time, which | 
| 367 |  |  |  |  |  |  | might affect timers and time-outs. | 
| 368 |  |  |  |  |  |  |  | 
| 369 |  |  |  |  |  |  | When this is the case, you can call this method, which will update the | 
| 370 |  |  |  |  |  |  | event loop's idea of "current time". | 
| 371 |  |  |  |  |  |  |  | 
| 372 |  |  |  |  |  |  | A typical example would be a script in a web server (e.g. C) - | 
| 373 |  |  |  |  |  |  | when mod_perl executes the script, then the event loop will have the wrong | 
| 374 |  |  |  |  |  |  | idea about the "current time" (being potentially far in the past, when the | 
| 375 |  |  |  |  |  |  | script ran the last time). In that case you should arrange a call to C<< | 
| 376 |  |  |  |  |  |  | AnyEvent->now_update >> each time the web server process wakes up again | 
| 377 |  |  |  |  |  |  | (e.g. at the start of your script, or in a handler). | 
| 378 |  |  |  |  |  |  |  | 
| 379 |  |  |  |  |  |  | Note that updating the time I cause some events to be handled. | 
| 380 |  |  |  |  |  |  |  | 
| 381 |  |  |  |  |  |  | =back | 
| 382 |  |  |  |  |  |  |  | 
| 383 |  |  |  |  |  |  | =head2 SIGNAL WATCHERS | 
| 384 |  |  |  |  |  |  |  | 
| 385 |  |  |  |  |  |  | $w = AnyEvent->signal (signal => , cb => ); | 
| 386 |  |  |  |  |  |  |  | 
| 387 |  |  |  |  |  |  | You can watch for signals using a signal watcher, C is the signal | 
| 388 |  |  |  |  |  |  | I in uppercase and without any C prefix, C is the Perl | 
| 389 |  |  |  |  |  |  | callback to be invoked whenever a signal occurs. | 
| 390 |  |  |  |  |  |  |  | 
| 391 |  |  |  |  |  |  | Although the callback might get passed parameters, their value and | 
| 392 |  |  |  |  |  |  | presence is undefined and you cannot rely on them. Portable AnyEvent | 
| 393 |  |  |  |  |  |  | callbacks cannot use arguments passed to signal watcher callbacks. | 
| 394 |  |  |  |  |  |  |  | 
| 395 |  |  |  |  |  |  | Multiple signal occurrences can be clumped together into one callback | 
| 396 |  |  |  |  |  |  | invocation, and callback invocation will be synchronous. Synchronous means | 
| 397 |  |  |  |  |  |  | that it might take a while until the signal gets handled by the process, | 
| 398 |  |  |  |  |  |  | but it is guaranteed not to interrupt any other callbacks. | 
| 399 |  |  |  |  |  |  |  | 
| 400 |  |  |  |  |  |  | The main advantage of using these watchers is that you can share a signal | 
| 401 |  |  |  |  |  |  | between multiple watchers, and AnyEvent will ensure that signals will not | 
| 402 |  |  |  |  |  |  | interrupt your program at bad times. | 
| 403 |  |  |  |  |  |  |  | 
| 404 |  |  |  |  |  |  | This watcher might use C<%SIG> (depending on the event loop used), | 
| 405 |  |  |  |  |  |  | so programs overwriting those signals directly will likely not work | 
| 406 |  |  |  |  |  |  | correctly. | 
| 407 |  |  |  |  |  |  |  | 
| 408 |  |  |  |  |  |  | Example: exit on SIGINT | 
| 409 |  |  |  |  |  |  |  | 
| 410 |  |  |  |  |  |  | my $w = AnyEvent->signal (signal => "INT", cb => sub { exit 1 }); | 
| 411 |  |  |  |  |  |  |  | 
| 412 |  |  |  |  |  |  | =head3 Restart Behaviour | 
| 413 |  |  |  |  |  |  |  | 
| 414 |  |  |  |  |  |  | While restart behaviour is up to the event loop implementation, most will | 
| 415 |  |  |  |  |  |  | not restart syscalls (that includes L and AnyEvent's | 
| 416 |  |  |  |  |  |  | pure perl implementation). | 
| 417 |  |  |  |  |  |  |  | 
| 418 |  |  |  |  |  |  | =head3 Safe/Unsafe Signals | 
| 419 |  |  |  |  |  |  |  | 
| 420 |  |  |  |  |  |  | Perl signals can be either "safe" (synchronous to opcode handling) | 
| 421 |  |  |  |  |  |  | or "unsafe" (asynchronous) - the former might delay signal delivery | 
| 422 |  |  |  |  |  |  | indefinitely, the latter might corrupt your memory. | 
| 423 |  |  |  |  |  |  |  | 
| 424 |  |  |  |  |  |  | AnyEvent signal handlers are, in addition, synchronous to the event loop, | 
| 425 |  |  |  |  |  |  | i.e. they will not interrupt your running perl program but will only be | 
| 426 |  |  |  |  |  |  | called as part of the normal event handling (just like timer, I/O etc. | 
| 427 |  |  |  |  |  |  | callbacks, too). | 
| 428 |  |  |  |  |  |  |  | 
| 429 |  |  |  |  |  |  | =head3 Signal Races, Delays and Workarounds | 
| 430 |  |  |  |  |  |  |  | 
| 431 |  |  |  |  |  |  | Many event loops (e.g. Glib, Tk, Qt, IO::Async) do not support | 
| 432 |  |  |  |  |  |  | attaching callbacks to signals in a generic way, which is a pity, | 
| 433 |  |  |  |  |  |  | as you cannot do race-free signal handling in perl, requiring | 
| 434 |  |  |  |  |  |  | C libraries for this. AnyEvent will try to do its best, which | 
| 435 |  |  |  |  |  |  | means in some cases, signals will be delayed. The maximum time | 
| 436 |  |  |  |  |  |  | a signal might be delayed is 10 seconds by default, but can | 
| 437 |  |  |  |  |  |  | be overriden via C<$ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY}> or | 
| 438 |  |  |  |  |  |  | C<$AnyEvent::MAX_SIGNAL_LATENCY> - see the L | 
| 439 |  |  |  |  |  |  | section for details. | 
| 440 |  |  |  |  |  |  |  | 
| 441 |  |  |  |  |  |  | All these problems can be avoided by installing the optional | 
| 442 |  |  |  |  |  |  | L module, which works with most event loops. It will not | 
| 443 |  |  |  |  |  |  | work with inherently broken event loops such as L or L | 
| 444 |  |  |  |  |  |  | (and not with L currently). For those, you just have to suffer the | 
| 445 |  |  |  |  |  |  | delays. | 
| 446 |  |  |  |  |  |  |  | 
| 447 |  |  |  |  |  |  | =head2 CHILD PROCESS WATCHERS | 
| 448 |  |  |  |  |  |  |  | 
| 449 |  |  |  |  |  |  | $w = AnyEvent->child (pid => , cb => ); | 
| 450 |  |  |  |  |  |  |  | 
| 451 |  |  |  |  |  |  | You can also watch for a child process exit and catch its exit status. | 
| 452 |  |  |  |  |  |  |  | 
| 453 |  |  |  |  |  |  | The child process is specified by the C argument (on some backends, | 
| 454 |  |  |  |  |  |  | using C<0> watches for any child process exit, on others this will | 
| 455 |  |  |  |  |  |  | croak). The watcher will be triggered only when the child process has | 
| 456 |  |  |  |  |  |  | finished and an exit status is available, not on any trace events | 
| 457 |  |  |  |  |  |  | (stopped/continued). | 
| 458 |  |  |  |  |  |  |  | 
| 459 |  |  |  |  |  |  | The callback will be called with the pid and exit status (as returned by | 
| 460 |  |  |  |  |  |  | waitpid), so unlike other watcher types, you I rely on child watcher | 
| 461 |  |  |  |  |  |  | callback arguments. | 
| 462 |  |  |  |  |  |  |  | 
| 463 |  |  |  |  |  |  | This watcher type works by installing a signal handler for C, | 
| 464 |  |  |  |  |  |  | and since it cannot be shared, nothing else should use SIGCHLD or reap | 
| 465 |  |  |  |  |  |  | random child processes (waiting for specific child processes, e.g. inside | 
| 466 |  |  |  |  |  |  | C, is just fine). | 
| 467 |  |  |  |  |  |  |  | 
| 468 |  |  |  |  |  |  | There is a slight catch to child watchers, however: you usually start them | 
| 469 |  |  |  |  |  |  | I the child process was created, and this means the process could | 
| 470 |  |  |  |  |  |  | have exited already (and no SIGCHLD will be sent anymore). | 
| 471 |  |  |  |  |  |  |  | 
| 472 |  |  |  |  |  |  | Not all event models handle this correctly (neither POE nor IO::Async do, | 
| 473 |  |  |  |  |  |  | see their AnyEvent::Impl manpages for details), but even for event models | 
| 474 |  |  |  |  |  |  | that I handle this correctly, they usually need to be loaded before | 
| 475 |  |  |  |  |  |  | the process exits (i.e. before you fork in the first place). AnyEvent's | 
| 476 |  |  |  |  |  |  | pure perl event loop handles all cases correctly regardless of when you | 
| 477 |  |  |  |  |  |  | start the watcher. | 
| 478 |  |  |  |  |  |  |  | 
| 479 |  |  |  |  |  |  | This means you cannot create a child watcher as the very first | 
| 480 |  |  |  |  |  |  | thing in an AnyEvent program, you I to create at least one | 
| 481 |  |  |  |  |  |  | watcher before you C the child (alternatively, you can call | 
| 482 |  |  |  |  |  |  | C). | 
| 483 |  |  |  |  |  |  |  | 
| 484 |  |  |  |  |  |  | As most event loops do not support waiting for child events, they will be | 
| 485 |  |  |  |  |  |  | emulated by AnyEvent in most cases, in which case the latency and race | 
| 486 |  |  |  |  |  |  | problems mentioned in the description of signal watchers apply. | 
| 487 |  |  |  |  |  |  |  | 
| 488 |  |  |  |  |  |  | Example: fork a process and wait for it | 
| 489 |  |  |  |  |  |  |  | 
| 490 |  |  |  |  |  |  | my $done = AnyEvent->condvar; | 
| 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. | 
| 496 |  |  |  |  |  |  | my $pid = fork or exit 5; | 
| 497 |  |  |  |  |  |  |  | 
| 498 |  |  |  |  |  |  | my $w = AnyEvent->child ( | 
| 499 |  |  |  |  |  |  | pid => $pid, | 
| 500 |  |  |  |  |  |  | cb  => sub { | 
| 501 |  |  |  |  |  |  | my ($pid, $status) = @_; | 
| 502 |  |  |  |  |  |  | warn "pid $pid exited with status $status"; | 
| 503 |  |  |  |  |  |  | $done->send; | 
| 504 |  |  |  |  |  |  | }, | 
| 505 |  |  |  |  |  |  | ); | 
| 506 |  |  |  |  |  |  |  | 
| 507 |  |  |  |  |  |  | # do something else, then wait for process exit | 
| 508 |  |  |  |  |  |  | $done->recv; | 
| 509 |  |  |  |  |  |  |  | 
| 510 |  |  |  |  |  |  | =head2 IDLE WATCHERS | 
| 511 |  |  |  |  |  |  |  | 
| 512 |  |  |  |  |  |  | $w = AnyEvent->idle (cb => ); | 
| 513 |  |  |  |  |  |  |  | 
| 514 |  |  |  |  |  |  | This will repeatedly invoke the callback after the process becomes idle, | 
| 515 |  |  |  |  |  |  | until either the watcher is destroyed or new events have been detected. | 
| 516 |  |  |  |  |  |  |  | 
| 517 |  |  |  |  |  |  | Idle watchers are useful when there is a need to do something, but it | 
| 518 |  |  |  |  |  |  | is not so important (or wise) to do it instantly. The callback will be | 
| 519 |  |  |  |  |  |  | invoked only when there is "nothing better to do", which is usually | 
| 520 |  |  |  |  |  |  | defined as "all outstanding events have been handled and no new events | 
| 521 |  |  |  |  |  |  | have been detected". That means that idle watchers ideally get invoked | 
| 522 |  |  |  |  |  |  | when the event loop has just polled for new events but none have been | 
| 523 |  |  |  |  |  |  | detected. Instead of blocking to wait for more events, the idle watchers | 
| 524 |  |  |  |  |  |  | will be invoked. | 
| 525 |  |  |  |  |  |  |  | 
| 526 |  |  |  |  |  |  | Unfortunately, most event loops do not really support idle watchers (only | 
| 527 |  |  |  |  |  |  | EV, Event and Glib do it in a usable fashion) - for the rest, AnyEvent | 
| 528 |  |  |  |  |  |  | will simply call the callback "from time to time". | 
| 529 |  |  |  |  |  |  |  | 
| 530 |  |  |  |  |  |  | Example: read lines from STDIN, but only process them when the | 
| 531 |  |  |  |  |  |  | program is otherwise idle: | 
| 532 |  |  |  |  |  |  |  | 
| 533 |  |  |  |  |  |  | my @lines; # read data | 
| 534 |  |  |  |  |  |  | my $idle_w; | 
| 535 |  |  |  |  |  |  | my $io_w = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub { | 
| 536 |  |  |  |  |  |  | push @lines, scalar ; | 
| 537 |  |  |  |  |  |  |  | 
| 538 |  |  |  |  |  |  | # start an idle watcher, if not already done | 
| 539 |  |  |  |  |  |  | $idle_w ||= AnyEvent->idle (cb => sub { | 
| 540 |  |  |  |  |  |  | # handle only one line, when there are lines left | 
| 541 |  |  |  |  |  |  | if (my $line = shift @lines) { | 
| 542 |  |  |  |  |  |  | print "handled when idle: $line"; | 
| 543 |  |  |  |  |  |  | } else { | 
| 544 |  |  |  |  |  |  | # otherwise disable the idle watcher again | 
| 545 |  |  |  |  |  |  | undef $idle_w; | 
| 546 |  |  |  |  |  |  | } | 
| 547 |  |  |  |  |  |  | }); | 
| 548 |  |  |  |  |  |  | }); | 
| 549 |  |  |  |  |  |  |  | 
| 550 |  |  |  |  |  |  | =head2 CONDITION VARIABLES | 
| 551 |  |  |  |  |  |  |  | 
| 552 |  |  |  |  |  |  | $cv = AnyEvent->condvar; | 
| 553 |  |  |  |  |  |  |  | 
| 554 |  |  |  |  |  |  | $cv->send ( );  | 
| 555 |  |  |  |  |  |  | my @res = $cv->recv; | 
| 556 |  |  |  |  |  |  |  | 
| 557 |  |  |  |  |  |  | If you are familiar with some event loops you will know that all of them | 
| 558 |  |  |  |  |  |  | require you to run some blocking "loop", "run" or similar function that | 
| 559 |  |  |  |  |  |  | will actively watch for new events and call your callbacks. | 
| 560 |  |  |  |  |  |  |  | 
| 561 |  |  |  |  |  |  | AnyEvent is slightly different: it expects somebody else to run the event | 
| 562 |  |  |  |  |  |  | loop and will only block when necessary (usually when told by the user). | 
| 563 |  |  |  |  |  |  |  | 
| 564 |  |  |  |  |  |  | The tool to do that is called a "condition variable", so called because | 
| 565 |  |  |  |  |  |  | they represent a condition that must become true. | 
| 566 |  |  |  |  |  |  |  | 
| 567 |  |  |  |  |  |  | Now is probably a good time to look at the examples further below. | 
| 568 |  |  |  |  |  |  |  | 
| 569 |  |  |  |  |  |  | Condition variables can be created by calling the C<< AnyEvent->condvar | 
| 570 |  |  |  |  |  |  | >> method, usually without arguments. The only argument pair allowed is | 
| 571 |  |  |  |  |  |  | C, which specifies a callback to be called when the condition variable | 
| 572 |  |  |  |  |  |  | becomes true, with the condition variable as the first argument (but not | 
| 573 |  |  |  |  |  |  | the results). | 
| 574 |  |  |  |  |  |  |  | 
| 575 |  |  |  |  |  |  | After creation, the condition variable is "false" until it becomes "true" | 
| 576 |  |  |  |  |  |  | by calling the C method (or calling the condition variable as if it | 
| 577 |  |  |  |  |  |  | were a callback, read about the caveats in the description for the C<< | 
| 578 |  |  |  |  |  |  | ->send >> method). | 
| 579 |  |  |  |  |  |  |  | 
| 580 |  |  |  |  |  |  | Since condition variables are the most complex part of the AnyEvent API, here are | 
| 581 |  |  |  |  |  |  | some different mental models of what they are - pick the ones you can connect to: | 
| 582 |  |  |  |  |  |  |  | 
| 583 |  |  |  |  |  |  | =over 4 | 
| 584 |  |  |  |  |  |  |  | 
| 585 |  |  |  |  |  |  | =item * Condition variables are like callbacks - you can call them (and pass them instead | 
| 586 |  |  |  |  |  |  | of callbacks). Unlike callbacks however, you can also wait for them to be called. | 
| 587 |  |  |  |  |  |  |  | 
| 588 |  |  |  |  |  |  | =item * Condition variables are signals - one side can emit or send them, | 
| 589 |  |  |  |  |  |  | the other side can wait for them, or install a handler that is called when | 
| 590 |  |  |  |  |  |  | the signal fires. | 
| 591 |  |  |  |  |  |  |  | 
| 592 |  |  |  |  |  |  | =item * Condition variables are like "Merge Points" - points in your program | 
| 593 |  |  |  |  |  |  | where you merge multiple independent results/control flows into one. | 
| 594 |  |  |  |  |  |  |  | 
| 595 |  |  |  |  |  |  | =item * Condition variables represent a transaction - functions that start | 
| 596 |  |  |  |  |  |  | some kind of transaction can return them, leaving the caller the choice | 
| 597 |  |  |  |  |  |  | between waiting in a blocking fashion, or setting a callback. | 
| 598 |  |  |  |  |  |  |  | 
| 599 |  |  |  |  |  |  | =item * Condition variables represent future values, or promises to deliver | 
| 600 |  |  |  |  |  |  | some result, long before the result is available. | 
| 601 |  |  |  |  |  |  |  | 
| 602 |  |  |  |  |  |  | =back | 
| 603 |  |  |  |  |  |  |  | 
| 604 |  |  |  |  |  |  | Condition variables are very useful to signal that something has finished, | 
| 605 |  |  |  |  |  |  | for example, if you write a module that does asynchronous http requests, | 
| 606 |  |  |  |  |  |  | then a condition variable would be the ideal candidate to signal the | 
| 607 |  |  |  |  |  |  | availability of results. The user can either act when the callback is | 
| 608 |  |  |  |  |  |  | called or can synchronously C<< ->recv >> for the results. | 
| 609 |  |  |  |  |  |  |  | 
| 610 |  |  |  |  |  |  | You can also use them to simulate traditional event loops - for example, | 
| 611 |  |  |  |  |  |  | you can block your main program until an event occurs - for example, you | 
| 612 |  |  |  |  |  |  | could C<< ->recv >> in your main program until the user clicks the Quit | 
| 613 |  |  |  |  |  |  | button of your app, which would C<< ->send >> the "quit" event. | 
| 614 |  |  |  |  |  |  |  | 
| 615 |  |  |  |  |  |  | Note that condition variables recurse into the event loop - if you have | 
| 616 |  |  |  |  |  |  | two pieces of code that call C<< ->recv >> in a round-robin fashion, you | 
| 617 |  |  |  |  |  |  | lose. Therefore, condition variables are good to export to your caller, but | 
| 618 |  |  |  |  |  |  | you should avoid making a blocking wait yourself, at least in callbacks, | 
| 619 |  |  |  |  |  |  | as this asks for trouble. | 
| 620 |  |  |  |  |  |  |  | 
| 621 |  |  |  |  |  |  | Condition variables are represented by hash refs in perl, and the keys | 
| 622 |  |  |  |  |  |  | used by AnyEvent itself are all named C<_ae_XXX> to make subclassing | 
| 623 |  |  |  |  |  |  | easy (it is often useful to build your own transaction class on top of | 
| 624 |  |  |  |  |  |  | AnyEvent). To subclass, use C as base class and call | 
| 625 |  |  |  |  |  |  | its C method in your own C method. | 
| 626 |  |  |  |  |  |  |  | 
| 627 |  |  |  |  |  |  | There are two "sides" to a condition variable - the "producer side" which | 
| 628 |  |  |  |  |  |  | eventually calls C<< -> send >>, and the "consumer side", which waits | 
| 629 |  |  |  |  |  |  | for the send to occur. | 
| 630 |  |  |  |  |  |  |  | 
| 631 |  |  |  |  |  |  | Example: wait for a timer. | 
| 632 |  |  |  |  |  |  |  | 
| 633 |  |  |  |  |  |  | # condition: "wait till the timer is fired" | 
| 634 |  |  |  |  |  |  | my $timer_fired = AnyEvent->condvar; | 
| 635 |  |  |  |  |  |  |  | 
| 636 |  |  |  |  |  |  | # create the timer - we could wait for, say | 
| 637 |  |  |  |  |  |  | # a handle becomign ready, or even an | 
| 638 |  |  |  |  |  |  | # AnyEvent::HTTP request to finish, but | 
| 639 |  |  |  |  |  |  | # in this case, we simply use a timer: | 
| 640 |  |  |  |  |  |  | my $w = AnyEvent->timer ( | 
| 641 |  |  |  |  |  |  | after => 1, | 
| 642 |  |  |  |  |  |  | cb    => sub { $timer_fired->send }, | 
| 643 |  |  |  |  |  |  | ); | 
| 644 |  |  |  |  |  |  |  | 
| 645 |  |  |  |  |  |  | # this "blocks" (while handling events) till the callback | 
| 646 |  |  |  |  |  |  | # calls ->send | 
| 647 |  |  |  |  |  |  | $timer_fired->recv; | 
| 648 |  |  |  |  |  |  |  | 
| 649 |  |  |  |  |  |  | Example: wait for a timer, but take advantage of the fact that condition | 
| 650 |  |  |  |  |  |  | variables are also callable directly. | 
| 651 |  |  |  |  |  |  |  | 
| 652 |  |  |  |  |  |  | my $done = AnyEvent->condvar; | 
| 653 |  |  |  |  |  |  | my $delay = AnyEvent->timer (after => 5, cb => $done); | 
| 654 |  |  |  |  |  |  | $done->recv; | 
| 655 |  |  |  |  |  |  |  | 
| 656 |  |  |  |  |  |  | Example: Imagine an API that returns a condvar and doesn't support | 
| 657 |  |  |  |  |  |  | callbacks. This is how you make a synchronous call, for example from | 
| 658 |  |  |  |  |  |  | the main program: | 
| 659 |  |  |  |  |  |  |  | 
| 660 |  |  |  |  |  |  | use AnyEvent::CouchDB; | 
| 661 |  |  |  |  |  |  |  | 
| 662 |  |  |  |  |  |  | ... | 
| 663 |  |  |  |  |  |  |  | 
| 664 |  |  |  |  |  |  | my @info = $couchdb->info->recv; | 
| 665 |  |  |  |  |  |  |  | 
| 666 |  |  |  |  |  |  | And this is how you would just set a callback to be called whenever the | 
| 667 |  |  |  |  |  |  | results are available: | 
| 668 |  |  |  |  |  |  |  | 
| 669 |  |  |  |  |  |  | $couchdb->info->cb (sub { | 
| 670 |  |  |  |  |  |  | my @info = $_[0]->recv; | 
| 671 |  |  |  |  |  |  | }); | 
| 672 |  |  |  |  |  |  |  | 
| 673 |  |  |  |  |  |  | =head3 METHODS FOR PRODUCERS | 
| 674 |  |  |  |  |  |  |  | 
| 675 |  |  |  |  |  |  | These methods should only be used by the producing side, i.e. the | 
| 676 |  |  |  |  |  |  | code/module that eventually sends the signal. Note that it is also | 
| 677 |  |  |  |  |  |  | the producer side which creates the condvar in most cases, but it isn't | 
| 678 |  |  |  |  |  |  | uncommon for the consumer to create it as well. | 
| 679 |  |  |  |  |  |  |  | 
| 680 |  |  |  |  |  |  | =over 4 | 
| 681 |  |  |  |  |  |  |  | 
| 682 |  |  |  |  |  |  | =item $cv->send (...) | 
| 683 |  |  |  |  |  |  |  | 
| 684 |  |  |  |  |  |  | Flag the condition as ready - a running C<< ->recv >> and all further | 
| 685 |  |  |  |  |  |  | calls to C will (eventually) return after this method has been | 
| 686 |  |  |  |  |  |  | called. If nobody is waiting the send will be remembered. | 
| 687 |  |  |  |  |  |  |  | 
| 688 |  |  |  |  |  |  | If a callback has been set on the condition variable, it is called | 
| 689 |  |  |  |  |  |  | immediately from within send. | 
| 690 |  |  |  |  |  |  |  | 
| 691 |  |  |  |  |  |  | Any arguments passed to the C call will be returned by all | 
| 692 |  |  |  |  |  |  | future C<< ->recv >> calls. | 
| 693 |  |  |  |  |  |  |  | 
| 694 |  |  |  |  |  |  | Condition variables are overloaded so one can call them directly (as if | 
| 695 |  |  |  |  |  |  | they were a code reference). Calling them directly is the same as calling | 
| 696 |  |  |  |  |  |  | C. | 
| 697 |  |  |  |  |  |  |  | 
| 698 |  |  |  |  |  |  | =item $cv->croak ($error) | 
| 699 |  |  |  |  |  |  |  | 
| 700 |  |  |  |  |  |  | Similar to send, but causes all calls to C<< ->recv >> to invoke | 
| 701 |  |  |  |  |  |  | C with the given error message/object/scalar. | 
| 702 |  |  |  |  |  |  |  | 
| 703 |  |  |  |  |  |  | This can be used to signal any errors to the condition variable | 
| 704 |  |  |  |  |  |  | user/consumer. Doing it this way instead of calling C directly | 
| 705 |  |  |  |  |  |  | delays the error detection, but has the overwhelming advantage that it | 
| 706 |  |  |  |  |  |  | diagnoses the error at the place where the result is expected, and not | 
| 707 |  |  |  |  |  |  | deep in some event callback with no connection to the actual code causing | 
| 708 |  |  |  |  |  |  | the problem. | 
| 709 |  |  |  |  |  |  |  | 
| 710 |  |  |  |  |  |  | =item $cv->begin ([group callback]) | 
| 711 |  |  |  |  |  |  |  | 
| 712 |  |  |  |  |  |  | =item $cv->end | 
| 713 |  |  |  |  |  |  |  | 
| 714 |  |  |  |  |  |  | These two methods can be used to combine many transactions/events into | 
| 715 |  |  |  |  |  |  | one. For example, a function that pings many hosts in parallel might want | 
| 716 |  |  |  |  |  |  | to use a condition variable for the whole process. | 
| 717 |  |  |  |  |  |  |  | 
| 718 |  |  |  |  |  |  | Every call to C<< ->begin >> will increment a counter, and every call to | 
| 719 |  |  |  |  |  |  | C<< ->end >> will decrement it.  If the counter reaches C<0> in C<< ->end | 
| 720 |  |  |  |  |  |  | >>, the (last) callback passed to C will be executed, passing the | 
| 721 |  |  |  |  |  |  | condvar as first argument. That callback is I to call C<< ->send | 
| 722 |  |  |  |  |  |  | >>, but that is not required. If no group callback was set, C will | 
| 723 |  |  |  |  |  |  | be called without any arguments. | 
| 724 |  |  |  |  |  |  |  | 
| 725 |  |  |  |  |  |  | You can think of C<< $cv->send >> giving you an OR condition (one call | 
| 726 |  |  |  |  |  |  | sends), while C<< $cv->begin >> and C<< $cv->end >> giving you an AND | 
| 727 |  |  |  |  |  |  | condition (all C calls must be C'ed before the condvar sends). | 
| 728 |  |  |  |  |  |  |  | 
| 729 |  |  |  |  |  |  | Let's start with a simple example: you have two I/O watchers (for example, | 
| 730 |  |  |  |  |  |  | STDOUT and STDERR for a program), and you want to wait for both streams to | 
| 731 |  |  |  |  |  |  | close before activating a condvar: | 
| 732 |  |  |  |  |  |  |  | 
| 733 |  |  |  |  |  |  | my $cv = AnyEvent->condvar; | 
| 734 |  |  |  |  |  |  |  | 
| 735 |  |  |  |  |  |  | $cv->begin; # first watcher | 
| 736 |  |  |  |  |  |  | my $w1 = AnyEvent->io (fh => $fh1, cb => sub { | 
| 737 |  |  |  |  |  |  | defined sysread $fh1, my $buf, 4096 | 
| 738 |  |  |  |  |  |  | or $cv->end; | 
| 739 |  |  |  |  |  |  | }); | 
| 740 |  |  |  |  |  |  |  | 
| 741 |  |  |  |  |  |  | $cv->begin; # second watcher | 
| 742 |  |  |  |  |  |  | my $w2 = AnyEvent->io (fh => $fh2, cb => sub { | 
| 743 |  |  |  |  |  |  | defined sysread $fh2, my $buf, 4096 | 
| 744 |  |  |  |  |  |  | or $cv->end; | 
| 745 |  |  |  |  |  |  | }); | 
| 746 |  |  |  |  |  |  |  | 
| 747 |  |  |  |  |  |  | $cv->recv; | 
| 748 |  |  |  |  |  |  |  | 
| 749 |  |  |  |  |  |  | This works because for every event source (EOF on file handle), there is | 
| 750 |  |  |  |  |  |  | one call to C, so the condvar waits for all calls to C before | 
| 751 |  |  |  |  |  |  | sending. | 
| 752 |  |  |  |  |  |  |  | 
| 753 |  |  |  |  |  |  | The ping example mentioned above is slightly more complicated, as the | 
| 754 |  |  |  |  |  |  | there are results to be passed back, and the number of tasks that are | 
| 755 |  |  |  |  |  |  | begun can potentially be zero: | 
| 756 |  |  |  |  |  |  |  | 
| 757 |  |  |  |  |  |  | my $cv = AnyEvent->condvar; | 
| 758 |  |  |  |  |  |  |  | 
| 759 |  |  |  |  |  |  | my %result; | 
| 760 |  |  |  |  |  |  | $cv->begin (sub { shift->send (\%result) }); | 
| 761 |  |  |  |  |  |  |  | 
| 762 |  |  |  |  |  |  | for my $host (@list_of_hosts) { | 
| 763 |  |  |  |  |  |  | $cv->begin; | 
| 764 |  |  |  |  |  |  | ping_host_then_call_callback $host, sub { | 
| 765 |  |  |  |  |  |  | $result{$host} = ...; | 
| 766 |  |  |  |  |  |  | $cv->end; | 
| 767 |  |  |  |  |  |  | }; | 
| 768 |  |  |  |  |  |  | } | 
| 769 |  |  |  |  |  |  |  | 
| 770 |  |  |  |  |  |  | $cv->end; | 
| 771 |  |  |  |  |  |  |  | 
| 772 |  |  |  |  |  |  | ... | 
| 773 |  |  |  |  |  |  |  | 
| 774 |  |  |  |  |  |  | my $results = $cv->recv; | 
| 775 |  |  |  |  |  |  |  | 
| 776 |  |  |  |  |  |  | This code fragment supposedly pings a number of hosts and calls | 
| 777 |  |  |  |  |  |  | C after results for all then have have been gathered - in any | 
| 778 |  |  |  |  |  |  | order. To achieve this, the code issues a call to C when it starts | 
| 779 |  |  |  |  |  |  | each ping request and calls C when it has received some result for | 
| 780 |  |  |  |  |  |  | it. Since C and C only maintain a counter, the order in which | 
| 781 |  |  |  |  |  |  | results arrive is not relevant. | 
| 782 |  |  |  |  |  |  |  | 
| 783 |  |  |  |  |  |  | There is an additional bracketing call to C and C outside the | 
| 784 |  |  |  |  |  |  | loop, which serves two important purposes: first, it sets the callback | 
| 785 |  |  |  |  |  |  | to be called once the counter reaches C<0>, and second, it ensures that | 
| 786 |  |  |  |  |  |  | C is called even when C hosts are being pinged (the loop | 
| 787 |  |  |  |  |  |  | doesn't execute once). | 
| 788 |  |  |  |  |  |  |  | 
| 789 |  |  |  |  |  |  | This is the general pattern when you "fan out" into multiple (but | 
| 790 |  |  |  |  |  |  | potentially zero) subrequests: use an outer C/C pair to set | 
| 791 |  |  |  |  |  |  | the callback and ensure C is called at least once, and then, for each | 
| 792 |  |  |  |  |  |  | subrequest you start, call C and for each subrequest you finish, | 
| 793 |  |  |  |  |  |  | call C. | 
| 794 |  |  |  |  |  |  |  | 
| 795 |  |  |  |  |  |  | =back | 
| 796 |  |  |  |  |  |  |  | 
| 797 |  |  |  |  |  |  | =head3 METHODS FOR CONSUMERS | 
| 798 |  |  |  |  |  |  |  | 
| 799 |  |  |  |  |  |  | These methods should only be used by the consuming side, i.e. the | 
| 800 |  |  |  |  |  |  | code awaits the condition. | 
| 801 |  |  |  |  |  |  |  | 
| 802 |  |  |  |  |  |  | =over 4 | 
| 803 |  |  |  |  |  |  |  | 
| 804 |  |  |  |  |  |  | =item $cv->recv | 
| 805 |  |  |  |  |  |  |  | 
| 806 |  |  |  |  |  |  | Wait (blocking if necessary) until the C<< ->send >> or C<< ->croak | 
| 807 |  |  |  |  |  |  | >> methods have been called on C<$cv>, while servicing other watchers | 
| 808 |  |  |  |  |  |  | normally. | 
| 809 |  |  |  |  |  |  |  | 
| 810 |  |  |  |  |  |  | You can only wait once on a condition - additional calls are valid but | 
| 811 |  |  |  |  |  |  | will return immediately. | 
| 812 |  |  |  |  |  |  |  | 
| 813 |  |  |  |  |  |  | If an error condition has been set by calling C<< ->croak >>, then this | 
| 814 |  |  |  |  |  |  | function will call C. | 
| 815 |  |  |  |  |  |  |  | 
| 816 |  |  |  |  |  |  | In list context, all parameters passed to C will be returned, | 
| 817 |  |  |  |  |  |  | in scalar context only the first one will be returned. | 
| 818 |  |  |  |  |  |  |  | 
| 819 |  |  |  |  |  |  | Note that doing a blocking wait in a callback is not supported by any | 
| 820 |  |  |  |  |  |  | event loop, that is, recursive invocation of a blocking C<< ->recv >> is | 
| 821 |  |  |  |  |  |  | not allowed and the C call will C if such a condition is | 
| 822 |  |  |  |  |  |  | detected. This requirement can be dropped by relying on L | 
| 823 |  |  |  |  |  |  | , which allows you to do a blocking C<< ->recv >> from any thread | 
| 824 |  |  |  |  |  |  | that doesn't run the event loop itself. L is loaded | 
| 825 |  |  |  |  |  |  | automatically when L is used with L, so code does not need | 
| 826 |  |  |  |  |  |  | to do anything special to take advantage of that: any code that would | 
| 827 |  |  |  |  |  |  | normally block your program because it calls C, be executed in an | 
| 828 |  |  |  |  |  |  | C thread instead without blocking other threads. | 
| 829 |  |  |  |  |  |  |  | 
| 830 |  |  |  |  |  |  | Not all event models support a blocking wait - some die in that case | 
| 831 |  |  |  |  |  |  | (programs might want to do that to stay interactive), so I | 
| 832 |  |  |  |  |  |  | using this from a module, never require a blocking wait>. Instead, let the | 
| 833 |  |  |  |  |  |  | caller decide whether the call will block or not (for example, by coupling | 
| 834 |  |  |  |  |  |  | condition variables with some kind of request results and supporting | 
| 835 |  |  |  |  |  |  | callbacks so the caller knows that getting the result will not block, | 
| 836 |  |  |  |  |  |  | while still supporting blocking waits if the caller so desires). | 
| 837 |  |  |  |  |  |  |  | 
| 838 |  |  |  |  |  |  | You can ensure that C<< ->recv >> never blocks by setting a callback and | 
| 839 |  |  |  |  |  |  | only calling C<< ->recv >> from within that callback (or at a later | 
| 840 |  |  |  |  |  |  | time). This will work even when the event loop does not support blocking | 
| 841 |  |  |  |  |  |  | waits otherwise. | 
| 842 |  |  |  |  |  |  |  | 
| 843 |  |  |  |  |  |  | =item $bool = $cv->ready | 
| 844 |  |  |  |  |  |  |  | 
| 845 |  |  |  |  |  |  | Returns true when the condition is "true", i.e. whether C or | 
| 846 |  |  |  |  |  |  | C have been called. | 
| 847 |  |  |  |  |  |  |  | 
| 848 |  |  |  |  |  |  | =item $cb = $cv->cb ($cb->($cv)) | 
| 849 |  |  |  |  |  |  |  | 
| 850 |  |  |  |  |  |  | This is a mutator function that returns the callback set (or C if | 
| 851 |  |  |  |  |  |  | not) and optionally replaces it before doing so. | 
| 852 |  |  |  |  |  |  |  | 
| 853 |  |  |  |  |  |  | The callback will be called when the condition becomes "true", i.e. when | 
| 854 |  |  |  |  |  |  | C or C are called, with the only argument being the | 
| 855 |  |  |  |  |  |  | condition variable itself. If the condition is already true, the | 
| 856 |  |  |  |  |  |  | callback is called immediately when it is set. Calling C inside | 
| 857 |  |  |  |  |  |  | the callback or at any later time is guaranteed not to block. | 
| 858 |  |  |  |  |  |  |  | 
| 859 |  |  |  |  |  |  | Additionally, when the callback is invoked, it is also removed from the | 
| 860 |  |  |  |  |  |  | condvar (reset to C), so the condvar does not keep a reference to | 
| 861 |  |  |  |  |  |  | the callback after invocation. | 
| 862 |  |  |  |  |  |  |  | 
| 863 |  |  |  |  |  |  | =back | 
| 864 |  |  |  |  |  |  |  | 
| 865 |  |  |  |  |  |  | =head1 SUPPORTED EVENT LOOPS/BACKENDS | 
| 866 |  |  |  |  |  |  |  | 
| 867 |  |  |  |  |  |  | The following backend classes are part of the AnyEvent distribution (every | 
| 868 |  |  |  |  |  |  | class has its own manpage): | 
| 869 |  |  |  |  |  |  |  | 
| 870 |  |  |  |  |  |  | =over 4 | 
| 871 |  |  |  |  |  |  |  | 
| 872 |  |  |  |  |  |  | =item Backends that are autoprobed when no other event loop can be found. | 
| 873 |  |  |  |  |  |  |  | 
| 874 |  |  |  |  |  |  | EV is the preferred backend when no other event loop seems to be in | 
| 875 |  |  |  |  |  |  | use. If EV is not installed, then AnyEvent will fall back to its own | 
| 876 |  |  |  |  |  |  | pure-perl implementation, which is available everywhere as it comes with | 
| 877 |  |  |  |  |  |  | AnyEvent itself. | 
| 878 |  |  |  |  |  |  |  | 
| 879 |  |  |  |  |  |  | AnyEvent::Impl::EV        based on EV (interface to libev, best choice). | 
| 880 |  |  |  |  |  |  | AnyEvent::Impl::Perl      pure-perl AnyEvent::Loop, fast and portable. | 
| 881 |  |  |  |  |  |  |  | 
| 882 |  |  |  |  |  |  | =item Backends that are transparently being picked up when they are used. | 
| 883 |  |  |  |  |  |  |  | 
| 884 |  |  |  |  |  |  | These will be used if they are already loaded when the first watcher | 
| 885 |  |  |  |  |  |  | is created, in which case it is assumed that the application is using | 
| 886 |  |  |  |  |  |  | them. This means that AnyEvent will automatically pick the right backend | 
| 887 |  |  |  |  |  |  | when the main program loads an event module before anything starts to | 
| 888 |  |  |  |  |  |  | create watchers. Nothing special needs to be done by the main program. | 
| 889 |  |  |  |  |  |  |  | 
| 890 |  |  |  |  |  |  | AnyEvent::Impl::Event     based on Event, very stable, few glitches. | 
| 891 |  |  |  |  |  |  | AnyEvent::Impl::Glib      based on Glib, slow but very stable. | 
| 892 |  |  |  |  |  |  | AnyEvent::Impl::Tk        based on Tk, very broken. | 
| 893 |  |  |  |  |  |  | AnyEvent::Impl::UV        based on UV, innovated square wheels. | 
| 894 |  |  |  |  |  |  | AnyEvent::Impl::EventLib  based on Event::Lib, leaks memory and worse. | 
| 895 |  |  |  |  |  |  | AnyEvent::Impl::POE       based on POE, very slow, some limitations. | 
| 896 |  |  |  |  |  |  | AnyEvent::Impl::Irssi     used when running within irssi. | 
| 897 |  |  |  |  |  |  | AnyEvent::Impl::IOAsync   based on IO::Async. | 
| 898 |  |  |  |  |  |  | AnyEvent::Impl::Cocoa     based on Cocoa::EventLoop. | 
| 899 |  |  |  |  |  |  | AnyEvent::Impl::FLTK      based on FLTK (fltk 2 binding). | 
| 900 |  |  |  |  |  |  |  | 
| 901 |  |  |  |  |  |  | =item Backends with special needs. | 
| 902 |  |  |  |  |  |  |  | 
| 903 |  |  |  |  |  |  | Qt requires the Qt::Application to be instantiated first, but will | 
| 904 |  |  |  |  |  |  | otherwise be picked up automatically. As long as the main program | 
| 905 |  |  |  |  |  |  | instantiates the application before any AnyEvent watchers are created, | 
| 906 |  |  |  |  |  |  | everything should just work. | 
| 907 |  |  |  |  |  |  |  | 
| 908 |  |  |  |  |  |  | AnyEvent::Impl::Qt        based on Qt. | 
| 909 |  |  |  |  |  |  |  | 
| 910 |  |  |  |  |  |  | =item Event loops that are indirectly supported via other backends. | 
| 911 |  |  |  |  |  |  |  | 
| 912 |  |  |  |  |  |  | Some event loops can be supported via other modules: | 
| 913 |  |  |  |  |  |  |  | 
| 914 |  |  |  |  |  |  | There is no direct support for WxWidgets (L) or L. | 
| 915 |  |  |  |  |  |  |  | 
| 916 |  |  |  |  |  |  | B has no support for watching file handles. However, you can | 
| 917 |  |  |  |  |  |  | use WxWidgets through the POE adaptor, as POE has a Wx backend that simply | 
| 918 |  |  |  |  |  |  | polls 20 times per second, which was considered to be too horrible to even | 
| 919 |  |  |  |  |  |  | consider for AnyEvent. | 
| 920 |  |  |  |  |  |  |  | 
| 921 |  |  |  |  |  |  | B is not supported as nobody seems to be using it, but it has a POE | 
| 922 |  |  |  |  |  |  | backend, so it can be supported through POE. | 
| 923 |  |  |  |  |  |  |  | 
| 924 |  |  |  |  |  |  | AnyEvent knows about both L and L, however, and will try to | 
| 925 |  |  |  |  |  |  | load L when detecting them, in the hope that POE will pick them up, | 
| 926 |  |  |  |  |  |  | in which case everything will be automatic. | 
| 927 |  |  |  |  |  |  |  | 
| 928 |  |  |  |  |  |  | =item Known event loops outside the AnyEvent distribution | 
| 929 |  |  |  |  |  |  |  | 
| 930 |  |  |  |  |  |  | The following event loops or programs support AnyEvent by providing their | 
| 931 |  |  |  |  |  |  | own AnyEvent backend. They will be picked up automatically. | 
| 932 |  |  |  |  |  |  |  | 
| 933 |  |  |  |  |  |  | urxvt::anyevent           available to rxvt-unicode extensions | 
| 934 |  |  |  |  |  |  |  | 
| 935 |  |  |  |  |  |  | =back | 
| 936 |  |  |  |  |  |  |  | 
| 937 |  |  |  |  |  |  | =head1 GLOBAL VARIABLES AND FUNCTIONS | 
| 938 |  |  |  |  |  |  |  | 
| 939 |  |  |  |  |  |  | These are not normally required to use AnyEvent, but can be useful to | 
| 940 |  |  |  |  |  |  | write AnyEvent extension modules. | 
| 941 |  |  |  |  |  |  |  | 
| 942 |  |  |  |  |  |  | =over 4 | 
| 943 |  |  |  |  |  |  |  | 
| 944 |  |  |  |  |  |  | =item $AnyEvent::MODEL | 
| 945 |  |  |  |  |  |  |  | 
| 946 |  |  |  |  |  |  | Contains C until the first watcher is being created, before the | 
| 947 |  |  |  |  |  |  | backend has been autodetected. | 
| 948 |  |  |  |  |  |  |  | 
| 949 |  |  |  |  |  |  | Afterwards it contains the event model that is being used, which is the | 
| 950 |  |  |  |  |  |  | name of the Perl class implementing the model. This class is usually one | 
| 951 |  |  |  |  |  |  | of the C modules, but can be any other class in the | 
| 952 |  |  |  |  |  |  | case AnyEvent has been extended at runtime (e.g. in I it | 
| 953 |  |  |  |  |  |  | will be C). | 
| 954 |  |  |  |  |  |  |  | 
| 955 |  |  |  |  |  |  | =item AnyEvent::detect | 
| 956 |  |  |  |  |  |  |  | 
| 957 |  |  |  |  |  |  | Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model | 
| 958 |  |  |  |  |  |  | if necessary. You should only call this function right before you would | 
| 959 |  |  |  |  |  |  | have created an AnyEvent watcher anyway, that is, as late as possible at | 
| 960 |  |  |  |  |  |  | runtime, and not e.g. during initialisation of your module. | 
| 961 |  |  |  |  |  |  |  | 
| 962 |  |  |  |  |  |  | The effect of calling this function is as if a watcher had been created | 
| 963 |  |  |  |  |  |  | (specifically, actions that happen "when the first watcher is created" | 
| 964 |  |  |  |  |  |  | happen when calling detetc as well). | 
| 965 |  |  |  |  |  |  |  | 
| 966 |  |  |  |  |  |  | If you need to do some initialisation before AnyEvent watchers are | 
| 967 |  |  |  |  |  |  | created, use C. | 
| 968 |  |  |  |  |  |  |  | 
| 969 |  |  |  |  |  |  | =item $guard = AnyEvent::post_detect { BLOCK } | 
| 970 |  |  |  |  |  |  |  | 
| 971 |  |  |  |  |  |  | Arranges for the code block to be executed as soon as the event model is | 
| 972 |  |  |  |  |  |  | autodetected (or immediately if that has already happened). | 
| 973 |  |  |  |  |  |  |  | 
| 974 |  |  |  |  |  |  | The block will be executed I the actual backend has been detected | 
| 975 |  |  |  |  |  |  | (C<$AnyEvent::MODEL> is set), so it is possible to do some initialisation | 
| 976 |  |  |  |  |  |  | only when AnyEvent is actually initialised - see the sources of | 
| 977 |  |  |  |  |  |  | L to see how this is used. | 
| 978 |  |  |  |  |  |  |  | 
| 979 |  |  |  |  |  |  | The most common usage is to create some global watchers, without forcing | 
| 980 |  |  |  |  |  |  | event module detection too early. For example, L creates | 
| 981 |  |  |  |  |  |  | and installs the global L watcher in a C block to | 
| 982 |  |  |  |  |  |  | avoid autodetecting the event module at load time. | 
| 983 |  |  |  |  |  |  |  | 
| 984 |  |  |  |  |  |  | If called in scalar or list context, then it creates and returns an object | 
| 985 |  |  |  |  |  |  | that automatically removes the callback again when it is destroyed (or | 
| 986 |  |  |  |  |  |  | C when the hook was immediately executed). See L for | 
| 987 |  |  |  |  |  |  | a case where this is useful. | 
| 988 |  |  |  |  |  |  |  | 
| 989 |  |  |  |  |  |  | Example: Create a watcher for the IO::AIO module and store it in | 
| 990 |  |  |  |  |  |  | C<$WATCHER>, but do so only do so after the event loop is initialised. | 
| 991 |  |  |  |  |  |  |  | 
| 992 |  |  |  |  |  |  | our WATCHER; | 
| 993 |  |  |  |  |  |  |  | 
| 994 |  |  |  |  |  |  | my $guard = AnyEvent::post_detect { | 
| 995 |  |  |  |  |  |  | $WATCHER = AnyEvent->io (fh => IO::AIO::poll_fileno, poll => 'r', cb => \&IO::AIO::poll_cb); | 
| 996 |  |  |  |  |  |  | }; | 
| 997 |  |  |  |  |  |  |  | 
| 998 |  |  |  |  |  |  | # the ||= is important in case post_detect immediately runs the block, | 
| 999 |  |  |  |  |  |  | # as to not clobber the newly-created watcher. assigning both watcher and | 
| 1000 |  |  |  |  |  |  | # post_detect guard to the same variable has the advantage of users being | 
| 1001 |  |  |  |  |  |  | # able to just C if the watcher causes them grief. | 
| 1002 |  |  |  |  |  |  |  | 
| 1003 |  |  |  |  |  |  | $WATCHER ||= $guard; | 
| 1004 |  |  |  |  |  |  |  | 
| 1005 |  |  |  |  |  |  | =item @AnyEvent::post_detect | 
| 1006 |  |  |  |  |  |  |  | 
| 1007 |  |  |  |  |  |  | This is a lower level interface then C (the | 
| 1008 |  |  |  |  |  |  | function). This variable is mainly useful for modules that can do | 
| 1009 |  |  |  |  |  |  | something useful when AnyEvent is used and thus want to know when it | 
| 1010 |  |  |  |  |  |  | is initialised, but do not need to even load it by default. This array | 
| 1011 |  |  |  |  |  |  | provides the means to hook into AnyEvent passively, without loading it. | 
| 1012 |  |  |  |  |  |  |  | 
| 1013 |  |  |  |  |  |  | Here is how it works: If there are any code references in this array (you | 
| 1014 |  |  |  |  |  |  | can C to it before or after loading AnyEvent), then they will be | 
| 1015 |  |  |  |  |  |  | called directly after the event loop has been chosen. | 
| 1016 |  |  |  |  |  |  |  | 
| 1017 |  |  |  |  |  |  | You should check C<$AnyEvent::MODEL> before adding to this array, though: | 
| 1018 |  |  |  |  |  |  | if it is defined then the event loop has already been detected, and the | 
| 1019 |  |  |  |  |  |  | array will be ignored. | 
| 1020 |  |  |  |  |  |  |  | 
| 1021 |  |  |  |  |  |  | Best use C when your application allows | 
| 1022 |  |  |  |  |  |  | it, as it takes care of these details. | 
| 1023 |  |  |  |  |  |  |  | 
| 1024 |  |  |  |  |  |  | Example: To load Coro::AnyEvent whenever Coro and AnyEvent are used | 
| 1025 |  |  |  |  |  |  | together, you could put this into Coro (this is the actual code used by | 
| 1026 |  |  |  |  |  |  | Coro to accomplish this): | 
| 1027 |  |  |  |  |  |  |  | 
| 1028 |  |  |  |  |  |  | if (defined $AnyEvent::MODEL) { | 
| 1029 |  |  |  |  |  |  | # AnyEvent already initialised, so load Coro::AnyEvent | 
| 1030 |  |  |  |  |  |  | require Coro::AnyEvent; | 
| 1031 |  |  |  |  |  |  | } else { | 
| 1032 |  |  |  |  |  |  | # AnyEvent not yet initialised, so make sure to load Coro::AnyEvent | 
| 1033 |  |  |  |  |  |  | # as soon as it is | 
| 1034 |  |  |  |  |  |  | push @AnyEvent::post_detect, sub { require Coro::AnyEvent }; | 
| 1035 |  |  |  |  |  |  | } | 
| 1036 |  |  |  |  |  |  |  | 
| 1037 |  |  |  |  |  |  | =item AnyEvent::postpone { BLOCK } | 
| 1038 |  |  |  |  |  |  |  | 
| 1039 |  |  |  |  |  |  | Arranges for the block to be executed as soon as possible, but not before | 
| 1040 |  |  |  |  |  |  | the call itself returns. In practise, the block will be executed just | 
| 1041 |  |  |  |  |  |  | before the event loop polls for new events, or shortly afterwards. | 
| 1042 |  |  |  |  |  |  |  | 
| 1043 |  |  |  |  |  |  | This function never returns anything (to make the C | 
| 1044 |  |  |  |  |  |  | }> idiom more useful. | 
| 1045 |  |  |  |  |  |  |  | 
| 1046 |  |  |  |  |  |  | To understand the usefulness of this function, consider a function that | 
| 1047 |  |  |  |  |  |  | asynchronously does something for you and returns some transaction | 
| 1048 |  |  |  |  |  |  | object or guard to let you cancel the operation. For example, | 
| 1049 |  |  |  |  |  |  | C: | 
| 1050 |  |  |  |  |  |  |  | 
| 1051 |  |  |  |  |  |  | # start a connection attempt unless one is active | 
| 1052 |  |  |  |  |  |  | $self->{connect_guard} ||= AnyEvent::Socket::tcp_connect "www.example.net", 80, sub { | 
| 1053 |  |  |  |  |  |  | delete $self->{connect_guard}; | 
| 1054 |  |  |  |  |  |  | ... | 
| 1055 |  |  |  |  |  |  | }; | 
| 1056 |  |  |  |  |  |  |  | 
| 1057 |  |  |  |  |  |  | Imagine that this function could instantly call the callback, for | 
| 1058 |  |  |  |  |  |  | example, because it detects an obvious error such as a negative port | 
| 1059 |  |  |  |  |  |  | number. Invoking the callback before the function returns causes problems | 
| 1060 |  |  |  |  |  |  | however: the callback will be called and will try to delete the guard | 
| 1061 |  |  |  |  |  |  | object. But since the function hasn't returned yet, there is nothing to | 
| 1062 |  |  |  |  |  |  | delete. When the function eventually returns it will assign the guard | 
| 1063 |  |  |  |  |  |  | object to C<< $self->{connect_guard} >>, where it will likely never be | 
| 1064 |  |  |  |  |  |  | deleted, so the program thinks it is still trying to connect. | 
| 1065 |  |  |  |  |  |  |  | 
| 1066 |  |  |  |  |  |  | This is where C should be used. Instead of calling the | 
| 1067 |  |  |  |  |  |  | callback directly on error: | 
| 1068 |  |  |  |  |  |  |  | 
| 1069 |  |  |  |  |  |  | $cb->(undef), return # signal error to callback, BAD! | 
| 1070 |  |  |  |  |  |  | if $some_error_condition; | 
| 1071 |  |  |  |  |  |  |  | 
| 1072 |  |  |  |  |  |  | It should use C: | 
| 1073 |  |  |  |  |  |  |  | 
| 1074 |  |  |  |  |  |  | AnyEvent::postpone { $cb->(undef) }, return # signal error to callback, later | 
| 1075 |  |  |  |  |  |  | if $some_error_condition; | 
| 1076 |  |  |  |  |  |  |  | 
| 1077 |  |  |  |  |  |  | =item AnyEvent::log $level, $msg[, @args] | 
| 1078 |  |  |  |  |  |  |  | 
| 1079 |  |  |  |  |  |  | Log the given C<$msg> at the given C<$level>. | 
| 1080 |  |  |  |  |  |  |  | 
| 1081 |  |  |  |  |  |  | If L is not loaded then this function makes a simple test | 
| 1082 |  |  |  |  |  |  | to see whether the message will be logged. If the test succeeds it will | 
| 1083 |  |  |  |  |  |  | load AnyEvent::Log and call C - consequently, look at | 
| 1084 |  |  |  |  |  |  | the L documentation for details. | 
| 1085 |  |  |  |  |  |  |  | 
| 1086 |  |  |  |  |  |  | If the test fails it will simply return. Right now this happens when a | 
| 1087 |  |  |  |  |  |  | numerical loglevel is used and it is larger than the level specified via | 
| 1088 |  |  |  |  |  |  | C<$ENV{PERL_ANYEVENT_VERBOSE}>. | 
| 1089 |  |  |  |  |  |  |  | 
| 1090 |  |  |  |  |  |  | If you want to sprinkle loads of logging calls around your code, consider | 
| 1091 |  |  |  |  |  |  | creating a logger callback with the C function, | 
| 1092 |  |  |  |  |  |  | which can reduce typing, codesize and can reduce the logging overhead | 
| 1093 |  |  |  |  |  |  | enourmously. | 
| 1094 |  |  |  |  |  |  |  | 
| 1095 |  |  |  |  |  |  | =item AnyEvent::fh_block $filehandle | 
| 1096 |  |  |  |  |  |  |  | 
| 1097 |  |  |  |  |  |  | =item AnyEvent::fh_unblock $filehandle | 
| 1098 |  |  |  |  |  |  |  | 
| 1099 |  |  |  |  |  |  | Sets blocking or non-blocking behaviour for the given filehandle. | 
| 1100 |  |  |  |  |  |  |  | 
| 1101 |  |  |  |  |  |  | =back | 
| 1102 |  |  |  |  |  |  |  | 
| 1103 |  |  |  |  |  |  | =head1 WHAT TO DO IN A MODULE | 
| 1104 |  |  |  |  |  |  |  | 
| 1105 |  |  |  |  |  |  | As a module author, you should C | 
| 1106 |  |  |  |  |  |  | freely, but you should not load a specific event module or rely on it. | 
| 1107 |  |  |  |  |  |  |  | 
| 1108 |  |  |  |  |  |  | Be careful when you create watchers in the module body - AnyEvent will | 
| 1109 |  |  |  |  |  |  | decide which event module to use as soon as the first method is called, so | 
| 1110 |  |  |  |  |  |  | by calling AnyEvent in your module body you force the user of your module | 
| 1111 |  |  |  |  |  |  | to load the event module first. | 
| 1112 |  |  |  |  |  |  |  | 
| 1113 |  |  |  |  |  |  | Never call C<< ->recv >> on a condition variable unless you I that | 
| 1114 |  |  |  |  |  |  | the C<< ->send >> method has been called on it already. This is | 
| 1115 |  |  |  |  |  |  | because it will stall the whole program, and the whole point of using | 
| 1116 |  |  |  |  |  |  | events is to stay interactive. | 
| 1117 |  |  |  |  |  |  |  | 
| 1118 |  |  |  |  |  |  | It is fine, however, to call C<< ->recv >> when the user of your module | 
| 1119 |  |  |  |  |  |  | requests it (i.e. if you create a http request object ad have a method | 
| 1120 |  |  |  |  |  |  | called C that returns the results, it may call C<< ->recv >> | 
| 1121 |  |  |  |  |  |  | freely, as the user of your module knows what she is doing. Always). | 
| 1122 |  |  |  |  |  |  |  | 
| 1123 |  |  |  |  |  |  | =head1 WHAT TO DO IN THE MAIN PROGRAM | 
| 1124 |  |  |  |  |  |  |  | 
| 1125 |  |  |  |  |  |  | There will always be a single main program - the only place that should | 
| 1126 |  |  |  |  |  |  | dictate which event model to use. | 
| 1127 |  |  |  |  |  |  |  | 
| 1128 |  |  |  |  |  |  | If the program is not event-based, it need not do anything special, even | 
| 1129 |  |  |  |  |  |  | when it depends on a module that uses an AnyEvent. If the program itself | 
| 1130 |  |  |  |  |  |  | uses AnyEvent, but does not care which event loop is used, all it needs | 
| 1131 |  |  |  |  |  |  | to do is C | 
| 1132 |  |  |  |  |  |  | available loop implementation. | 
| 1133 |  |  |  |  |  |  |  | 
| 1134 |  |  |  |  |  |  | If the main program relies on a specific event model - for example, in | 
| 1135 |  |  |  |  |  |  | Gtk2 programs you have to rely on the Glib module - you should load the | 
| 1136 |  |  |  |  |  |  | event module before loading AnyEvent or any module that uses it: generally | 
| 1137 |  |  |  |  |  |  | speaking, you should load it as early as possible. The reason is that | 
| 1138 |  |  |  |  |  |  | modules might create watchers when they are loaded, and AnyEvent will | 
| 1139 |  |  |  |  |  |  | decide on the event model to use as soon as it creates watchers, and it | 
| 1140 |  |  |  |  |  |  | might choose the wrong one unless you load the correct one yourself. | 
| 1141 |  |  |  |  |  |  |  | 
| 1142 |  |  |  |  |  |  | You can chose to use a pure-perl implementation by loading the | 
| 1143 |  |  |  |  |  |  | C module, which gives you similar behaviour | 
| 1144 |  |  |  |  |  |  | everywhere, but letting AnyEvent chose the model is generally better. | 
| 1145 |  |  |  |  |  |  |  | 
| 1146 |  |  |  |  |  |  | =head2 MAINLOOP EMULATION | 
| 1147 |  |  |  |  |  |  |  | 
| 1148 |  |  |  |  |  |  | Sometimes (often for short test scripts, or even standalone programs who | 
| 1149 |  |  |  |  |  |  | only want to use AnyEvent), you do not want to run a specific event loop. | 
| 1150 |  |  |  |  |  |  |  | 
| 1151 |  |  |  |  |  |  | In that case, you can use a condition variable like this: | 
| 1152 |  |  |  |  |  |  |  | 
| 1153 |  |  |  |  |  |  | AnyEvent->condvar->recv; | 
| 1154 |  |  |  |  |  |  |  | 
| 1155 |  |  |  |  |  |  | This has the effect of entering the event loop and looping forever. | 
| 1156 |  |  |  |  |  |  |  | 
| 1157 |  |  |  |  |  |  | Note that usually your program has some exit condition, in which case | 
| 1158 |  |  |  |  |  |  | it is better to use the "traditional" approach of storing a condition | 
| 1159 |  |  |  |  |  |  | variable somewhere, waiting for it, and sending it when the program should | 
| 1160 |  |  |  |  |  |  | exit cleanly. | 
| 1161 |  |  |  |  |  |  |  | 
| 1162 |  |  |  |  |  |  |  | 
| 1163 |  |  |  |  |  |  | =head1 OTHER MODULES | 
| 1164 |  |  |  |  |  |  |  | 
| 1165 |  |  |  |  |  |  | The following is a non-exhaustive list of additional modules that use | 
| 1166 |  |  |  |  |  |  | AnyEvent as a client and can therefore be mixed easily with other | 
| 1167 |  |  |  |  |  |  | AnyEvent modules and other event loops in the same program. Some of the | 
| 1168 |  |  |  |  |  |  | modules come as part of AnyEvent, the others are available via CPAN (see | 
| 1169 |  |  |  |  |  |  | L for | 
| 1170 |  |  |  |  |  |  | a longer non-exhaustive list), and the list is heavily biased towards | 
| 1171 |  |  |  |  |  |  | modules of the AnyEvent author himself :) | 
| 1172 |  |  |  |  |  |  |  | 
| 1173 |  |  |  |  |  |  | =over 4 | 
| 1174 |  |  |  |  |  |  |  | 
| 1175 |  |  |  |  |  |  | =item L (part of the AnyEvent distribution) | 
| 1176 |  |  |  |  |  |  |  | 
| 1177 |  |  |  |  |  |  | Contains various utility functions that replace often-used blocking | 
| 1178 |  |  |  |  |  |  | functions such as C with event/callback-based versions. | 
| 1179 |  |  |  |  |  |  |  | 
| 1180 |  |  |  |  |  |  | =item L (part of the AnyEvent distribution) | 
| 1181 |  |  |  |  |  |  |  | 
| 1182 |  |  |  |  |  |  | Provides various utility functions for (internet protocol) sockets, | 
| 1183 |  |  |  |  |  |  | addresses and name resolution. Also functions to create non-blocking tcp | 
| 1184 |  |  |  |  |  |  | connections or tcp servers, with IPv6 and SRV record support and more. | 
| 1185 |  |  |  |  |  |  |  | 
| 1186 |  |  |  |  |  |  | =item L (part of the AnyEvent distribution) | 
| 1187 |  |  |  |  |  |  |  | 
| 1188 |  |  |  |  |  |  | Provide read and write buffers, manages watchers for reads and writes, | 
| 1189 |  |  |  |  |  |  | supports raw and formatted I/O, I/O queued and fully transparent and | 
| 1190 |  |  |  |  |  |  | non-blocking SSL/TLS (via L). | 
| 1191 |  |  |  |  |  |  |  | 
| 1192 |  |  |  |  |  |  | =item L (part of the AnyEvent distribution) | 
| 1193 |  |  |  |  |  |  |  | 
| 1194 |  |  |  |  |  |  | Provides rich asynchronous DNS resolver capabilities. | 
| 1195 |  |  |  |  |  |  |  | 
| 1196 |  |  |  |  |  |  | =item L, L, L, L, L, L | 
| 1197 |  |  |  |  |  |  |  | 
| 1198 |  |  |  |  |  |  | Implement event-based interfaces to the protocols of the same name (for | 
| 1199 |  |  |  |  |  |  | the curious, IGS is the International Go Server and FCP is the Freenet | 
| 1200 |  |  |  |  |  |  | Client Protocol). | 
| 1201 |  |  |  |  |  |  |  | 
| 1202 |  |  |  |  |  |  | =item L (part of the AnyEvent distribution) | 
| 1203 |  |  |  |  |  |  |  | 
| 1204 |  |  |  |  |  |  | Truly asynchronous (as opposed to non-blocking) I/O, should be in the | 
| 1205 |  |  |  |  |  |  | toolbox of every event programmer. AnyEvent::AIO transparently fuses | 
| 1206 |  |  |  |  |  |  | L and AnyEvent together, giving AnyEvent access to event-based | 
| 1207 |  |  |  |  |  |  | file I/O, and much more. | 
| 1208 |  |  |  |  |  |  |  | 
| 1209 |  |  |  |  |  |  | =item L, L, L, L | 
| 1210 |  |  |  |  |  |  |  | 
| 1211 |  |  |  |  |  |  | These let you safely fork new subprocesses, either locally or | 
| 1212 |  |  |  |  |  |  | remotely (e.g.v ia ssh), using some RPC protocol or not, without | 
| 1213 |  |  |  |  |  |  | the limitations normally imposed by fork (AnyEvent works fine for | 
| 1214 |  |  |  |  |  |  | example). Dynamically-resized worker pools are obviously included as well. | 
| 1215 |  |  |  |  |  |  |  | 
| 1216 |  |  |  |  |  |  | And they are quite tiny and fast as well - "abusing" L | 
| 1217 |  |  |  |  |  |  | just to exec external programs can easily beat using C and C | 
| 1218 |  |  |  |  |  |  | (or even C) in most programs. | 
| 1219 |  |  |  |  |  |  |  | 
| 1220 |  |  |  |  |  |  | =item L | 
| 1221 |  |  |  |  |  |  |  | 
| 1222 |  |  |  |  |  |  | AnyEvent is good for non-blocking stuff, but it can't detect file or | 
| 1223 |  |  |  |  |  |  | path changes (e.g. "watch this directory for new files", "watch this | 
| 1224 |  |  |  |  |  |  | file for changes"). The L module promises to | 
| 1225 |  |  |  |  |  |  | do just that in a portbale fashion, supporting inotify on GNU/Linux and | 
| 1226 |  |  |  |  |  |  | some weird, without doubt broken, stuff on OS X to monitor files. It can | 
| 1227 |  |  |  |  |  |  | fall back to blocking scans at regular intervals transparently on other | 
| 1228 |  |  |  |  |  |  | platforms, so it's about as portable as it gets. | 
| 1229 |  |  |  |  |  |  |  | 
| 1230 |  |  |  |  |  |  | (I haven't used it myself, but it seems the biggest problem with it is | 
| 1231 |  |  |  |  |  |  | it quite bad performance). | 
| 1232 |  |  |  |  |  |  |  | 
| 1233 |  |  |  |  |  |  | =item L | 
| 1234 |  |  |  |  |  |  |  | 
| 1235 |  |  |  |  |  |  | Executes L requests asynchronously in a proxy process for you, | 
| 1236 |  |  |  |  |  |  | notifying you in an event-based way when the operation is finished. | 
| 1237 |  |  |  |  |  |  |  | 
| 1238 |  |  |  |  |  |  | =item L | 
| 1239 |  |  |  |  |  |  |  | 
| 1240 |  |  |  |  |  |  | The fastest ping in the west. | 
| 1241 |  |  |  |  |  |  |  | 
| 1242 |  |  |  |  |  |  | =item L | 
| 1243 |  |  |  |  |  |  |  | 
| 1244 |  |  |  |  |  |  | Has special support for AnyEvent via L, which allows you | 
| 1245 |  |  |  |  |  |  | to simply invert the flow control - don't call us, we will call you: | 
| 1246 |  |  |  |  |  |  |  | 
| 1247 |  |  |  |  |  |  | async { | 
| 1248 |  |  |  |  |  |  | Coro::AnyEvent::sleep 5; # creates a 5s timer and waits for it | 
| 1249 |  |  |  |  |  |  | print "5 seconds later!\n"; | 
| 1250 |  |  |  |  |  |  |  | 
| 1251 |  |  |  |  |  |  | Coro::AnyEvent::readable *STDIN; # uses an I/O watcher | 
| 1252 |  |  |  |  |  |  | my $line = ; # works for ttys | 
| 1253 |  |  |  |  |  |  |  | 
| 1254 |  |  |  |  |  |  | AnyEvent::HTTP::http_get "url", Coro::rouse_cb; | 
| 1255 |  |  |  |  |  |  | my ($body, $hdr) = Coro::rouse_wait; | 
| 1256 |  |  |  |  |  |  | }; | 
| 1257 |  |  |  |  |  |  |  | 
| 1258 |  |  |  |  |  |  | =back | 
| 1259 |  |  |  |  |  |  |  | 
| 1260 |  |  |  |  |  |  | =cut | 
| 1261 |  |  |  |  |  |  |  | 
| 1262 |  |  |  |  |  |  | package AnyEvent; | 
| 1263 |  |  |  |  |  |  |  | 
| 1264 |  |  |  |  |  |  | BEGIN { | 
| 1265 | 82 |  |  | 82 |  | 233549 | require "AnyEvent/constants.pl"; | 
| 1266 | 82 |  |  |  |  | 664 | &AnyEvent::common_sense; | 
| 1267 |  |  |  |  |  |  | } | 
| 1268 |  |  |  |  |  |  |  | 
| 1269 | 82 |  |  | 82 |  | 506 | use Carp (); | 
|  | 82 |  |  |  |  | 149 |  | 
|  | 82 |  |  |  |  | 31237 |  | 
| 1270 |  |  |  |  |  |  |  | 
| 1271 |  |  |  |  |  |  | our $VERSION = 7.16; | 
| 1272 |  |  |  |  |  |  | our $MODEL; | 
| 1273 |  |  |  |  |  |  | our @ISA; | 
| 1274 |  |  |  |  |  |  | our @REGISTRY; | 
| 1275 |  |  |  |  |  |  | our $VERBOSE; | 
| 1276 |  |  |  |  |  |  | our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred | 
| 1277 |  |  |  |  |  |  | our $MAX_SIGNAL_LATENCY = $ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY} || 10; # executes after the BEGIN block below (tainting!) | 
| 1278 |  |  |  |  |  |  |  | 
| 1279 |  |  |  |  |  |  | BEGIN { | 
| 1280 | 82 |  |  | 82 |  | 5525 | eval "sub TAINT (){" . (${^TAINT}*1) . "}"; | 
| 1281 |  |  |  |  |  |  |  | 
| 1282 | 82 | 50 |  |  |  | 561 | delete @ENV{grep /^PERL_ANYEVENT_/, keys %ENV} | 
| 1283 |  |  |  |  |  |  | if ${^TAINT}; | 
| 1284 |  |  |  |  |  |  |  | 
| 1285 |  |  |  |  |  |  | $ENV{"PERL_ANYEVENT_$_"} = $ENV{"AE_$_"} | 
| 1286 | 82 |  | 33 |  |  | 2211 | for grep s/^AE_// && !exists $ENV{"PERL_ANYEVENT_$_"}, keys %ENV; | 
| 1287 |  |  |  |  |  |  |  | 
| 1288 | 82 | 50 |  |  |  | 345 | @ENV{grep /^PERL_ANYEVENT_/, keys %ENV} = () | 
| 1289 |  |  |  |  |  |  | if ${^TAINT}; | 
| 1290 |  |  |  |  |  |  |  | 
| 1291 |  |  |  |  |  |  | # $ENV{PERL_ANYEVENT_xxx} now valid | 
| 1292 |  |  |  |  |  |  |  | 
| 1293 | 82 | 50 |  |  |  | 378 | $VERBOSE = length $ENV{PERL_ANYEVENT_VERBOSE} ? $ENV{PERL_ANYEVENT_VERBOSE}*1 : 4; | 
| 1294 |  |  |  |  |  |  |  | 
| 1295 | 82 |  |  |  |  | 146 | my $idx; | 
| 1296 |  |  |  |  |  |  | $PROTOCOL{$_} = ++$idx | 
| 1297 | 82 |  | 50 |  |  | 40262 | for reverse split /\s*,\s*/, | 
| 1298 |  |  |  |  |  |  | $ENV{PERL_ANYEVENT_PROTOCOLS} || "ipv4,ipv6"; | 
| 1299 |  |  |  |  |  |  | } | 
| 1300 |  |  |  |  |  |  |  | 
| 1301 |  |  |  |  |  |  | our @post_detect; | 
| 1302 |  |  |  |  |  |  |  | 
| 1303 |  |  |  |  |  |  | sub post_detect(&) { | 
| 1304 | 0 |  |  | 0 | 1 | 0 | my ($cb) = @_; | 
| 1305 |  |  |  |  |  |  |  | 
| 1306 | 0 |  |  |  |  | 0 | push @post_detect, $cb; | 
| 1307 |  |  |  |  |  |  |  | 
| 1308 |  |  |  |  |  |  | defined wantarray | 
| 1309 | 0 | 0 |  |  |  | 0 | ? bless \$cb, "AnyEvent::Util::postdetect" | 
| 1310 |  |  |  |  |  |  | : () | 
| 1311 |  |  |  |  |  |  | } | 
| 1312 |  |  |  |  |  |  |  | 
| 1313 |  |  |  |  |  |  | sub AnyEvent::Util::postdetect::DESTROY { | 
| 1314 | 0 |  |  | 0 |  | 0 | @post_detect = grep $_ != ${$_[0]}, @post_detect; | 
|  | 0 |  |  |  |  | 0 |  | 
| 1315 |  |  |  |  |  |  | } | 
| 1316 |  |  |  |  |  |  |  | 
| 1317 |  |  |  |  |  |  | our $POSTPONE_W; | 
| 1318 |  |  |  |  |  |  | our @POSTPONE; | 
| 1319 |  |  |  |  |  |  |  | 
| 1320 |  |  |  |  |  |  | sub _postpone_exec { | 
| 1321 | 0 |  |  | 0 |  | 0 | undef $POSTPONE_W; | 
| 1322 |  |  |  |  |  |  |  | 
| 1323 | 0 |  |  |  |  | 0 | &{ shift @POSTPONE } | 
|  | 0 |  |  |  |  | 0 |  | 
| 1324 |  |  |  |  |  |  | while @POSTPONE; | 
| 1325 |  |  |  |  |  |  | } | 
| 1326 |  |  |  |  |  |  |  | 
| 1327 |  |  |  |  |  |  | sub postpone(&) { | 
| 1328 | 0 |  |  | 0 | 1 | 0 | push @POSTPONE, shift; | 
| 1329 |  |  |  |  |  |  |  | 
| 1330 | 0 |  | 0 |  |  | 0 | $POSTPONE_W ||= AE::timer (0, 0, \&_postpone_exec); | 
| 1331 |  |  |  |  |  |  |  | 
| 1332 |  |  |  |  |  |  | () | 
| 1333 | 0 |  |  |  |  | 0 | } | 
| 1334 |  |  |  |  |  |  |  | 
| 1335 |  |  |  |  |  |  | sub log($$;@) { | 
| 1336 |  |  |  |  |  |  | # only load the big bloated module when we actually are about to log something | 
| 1337 | 66 | 50 | 50 | 66 | 1 | 359 | if ($_[0] <= ($VERBOSE || 1)) { # also catches non-numeric levels(!) and fatal | 
| 1338 | 0 |  |  |  |  | 0 | local ($!, $@); | 
| 1339 | 0 |  |  |  |  | 0 | require AnyEvent::Log; # among other things, sets $VERBOSE to 9 | 
| 1340 |  |  |  |  |  |  | # AnyEvent::Log overwrites this function | 
| 1341 | 0 |  |  |  |  | 0 | goto &log; | 
| 1342 |  |  |  |  |  |  | } | 
| 1343 |  |  |  |  |  |  |  | 
| 1344 |  |  |  |  |  |  | 0 # not logged | 
| 1345 | 66 |  |  |  |  | 78004 | } | 
| 1346 |  |  |  |  |  |  |  | 
| 1347 |  |  |  |  |  |  | sub _logger($;$) { | 
| 1348 | 0 |  |  | 0 |  | 0 | my ($level, $renabled) = @_; | 
| 1349 |  |  |  |  |  |  |  | 
| 1350 | 0 |  |  |  |  | 0 | $$renabled = $level <= $VERBOSE; | 
| 1351 |  |  |  |  |  |  |  | 
| 1352 | 0 |  |  |  |  | 0 | my $logger = [(caller)[0], $level, $renabled]; | 
| 1353 |  |  |  |  |  |  |  | 
| 1354 | 0 |  |  |  |  | 0 | $AnyEvent::Log::LOGGER{$logger+0} = $logger; | 
| 1355 |  |  |  |  |  |  |  | 
| 1356 |  |  |  |  |  |  | #   return unless defined wantarray; | 
| 1357 |  |  |  |  |  |  | # | 
| 1358 |  |  |  |  |  |  | #   require AnyEvent::Util; | 
| 1359 |  |  |  |  |  |  | #   my $guard = AnyEvent::Util::guard (sub { | 
| 1360 |  |  |  |  |  |  | #      # "clean up" | 
| 1361 |  |  |  |  |  |  | #      delete $LOGGER{$logger+0}; | 
| 1362 |  |  |  |  |  |  | #   }); | 
| 1363 |  |  |  |  |  |  | # | 
| 1364 |  |  |  |  |  |  | #   sub { | 
| 1365 |  |  |  |  |  |  | #      return 0 unless $$renabled; | 
| 1366 |  |  |  |  |  |  | # | 
| 1367 |  |  |  |  |  |  | #      $guard if 0; # keep guard alive, but don't cause runtime overhead | 
| 1368 |  |  |  |  |  |  | #      require AnyEvent::Log unless $AnyEvent::Log::VERSION; | 
| 1369 |  |  |  |  |  |  | #      package AnyEvent::Log; | 
| 1370 |  |  |  |  |  |  | #      _log ($logger->[0], $level, @_) # logger->[0] has been converted at load time | 
| 1371 |  |  |  |  |  |  | #   } | 
| 1372 |  |  |  |  |  |  | } | 
| 1373 |  |  |  |  |  |  |  | 
| 1374 |  |  |  |  |  |  | if (length $ENV{PERL_ANYEVENT_LOG}) { | 
| 1375 |  |  |  |  |  |  | require AnyEvent::Log; # AnyEvent::Log does the thing for us | 
| 1376 |  |  |  |  |  |  | } | 
| 1377 |  |  |  |  |  |  |  | 
| 1378 |  |  |  |  |  |  | BEGIN { | 
| 1379 |  |  |  |  |  |  | *_fh_nonblocking = AnyEvent::WIN32 | 
| 1380 |  |  |  |  |  |  | ? sub($$) { | 
| 1381 |  |  |  |  |  |  | ioctl $_[0], 0x8004667e, pack "L", $_[1]; # FIONBIO | 
| 1382 |  |  |  |  |  |  | } | 
| 1383 |  |  |  |  |  |  | : sub($$) { | 
| 1384 | 39 | 50 |  | 39 |  | 332 | fcntl $_[0], AnyEvent::F_SETFL, $_[1] ? AnyEvent::O_NONBLOCK : 0; | 
| 1385 |  |  |  |  |  |  | } | 
| 1386 | 82 |  |  | 82 |  | 116694 | ; | 
| 1387 |  |  |  |  |  |  | } | 
| 1388 |  |  |  |  |  |  |  | 
| 1389 |  |  |  |  |  |  | sub fh_block($) { | 
| 1390 | 0 |  |  | 0 | 1 | 0 | _fh_nonblocking shift, 0 | 
| 1391 |  |  |  |  |  |  | } | 
| 1392 |  |  |  |  |  |  |  | 
| 1393 |  |  |  |  |  |  | sub fh_unblock($) { | 
| 1394 | 39 |  |  | 39 | 1 | 93 | _fh_nonblocking shift, 1 | 
| 1395 |  |  |  |  |  |  | } | 
| 1396 |  |  |  |  |  |  |  | 
| 1397 |  |  |  |  |  |  | our @models = ( | 
| 1398 |  |  |  |  |  |  | [EV::                   => AnyEvent::Impl::EV::], | 
| 1399 |  |  |  |  |  |  | [AnyEvent::Loop::       => AnyEvent::Impl::Perl::], | 
| 1400 |  |  |  |  |  |  | # everything below here will not (normally) be autoprobed | 
| 1401 |  |  |  |  |  |  | # as the pure perl backend should work everywhere | 
| 1402 |  |  |  |  |  |  | # and is usually faster | 
| 1403 |  |  |  |  |  |  | [Irssi::                => AnyEvent::Impl::Irssi::],    # Irssi has a bogus "Event" package, so msut be near the top | 
| 1404 |  |  |  |  |  |  | [Event::                => AnyEvent::Impl::Event::],    # slow, stable | 
| 1405 |  |  |  |  |  |  | [Glib::                 => AnyEvent::Impl::Glib::],     # becomes extremely slow with many watchers | 
| 1406 |  |  |  |  |  |  | # everything below here should not be autoloaded | 
| 1407 |  |  |  |  |  |  | [Event::Lib::           => AnyEvent::Impl::EventLib::], # too buggy | 
| 1408 |  |  |  |  |  |  | [Tk::                   => AnyEvent::Impl::Tk::],       # crashes with many handles | 
| 1409 |  |  |  |  |  |  | [UV::                   => AnyEvent::Impl::UV::],       # switched from libev, added back all bugs imaginable | 
| 1410 |  |  |  |  |  |  | [Qt::                   => AnyEvent::Impl::Qt::],       # requires special main program | 
| 1411 |  |  |  |  |  |  | [POE::Kernel::          => AnyEvent::Impl::POE::],      # lasciate ogni speranza | 
| 1412 |  |  |  |  |  |  | [Wx::                   => AnyEvent::Impl::POE::], | 
| 1413 |  |  |  |  |  |  | [Prima::                => AnyEvent::Impl::POE::], | 
| 1414 |  |  |  |  |  |  | [IO::Async::Loop::      => AnyEvent::Impl::IOAsync::],  # a bitch to autodetect | 
| 1415 |  |  |  |  |  |  | [Cocoa::EventLoop::     => AnyEvent::Impl::Cocoa::], | 
| 1416 |  |  |  |  |  |  | [FLTK::                 => AnyEvent::Impl::FLTK::], | 
| 1417 |  |  |  |  |  |  | ); | 
| 1418 |  |  |  |  |  |  |  | 
| 1419 |  |  |  |  |  |  | our @isa_hook; | 
| 1420 |  |  |  |  |  |  |  | 
| 1421 |  |  |  |  |  |  | sub _isa_set { | 
| 1422 | 15 |  |  | 15 |  | 77 | my @pkg = ("AnyEvent", (map $_->[0], grep defined, @isa_hook), $MODEL); | 
| 1423 |  |  |  |  |  |  |  | 
| 1424 | 17 |  |  |  |  | 402 | @{"$pkg[$_-1]::ISA"} = $pkg[$_] | 
| 1425 | 15 |  |  |  |  | 71 | for 1 .. $#pkg; | 
| 1426 |  |  |  |  |  |  |  | 
| 1427 | 15 | 100 | 66 |  |  | 106 | grep $_ && $_->[1], @isa_hook | 
| 1428 |  |  |  |  |  |  | and AE::_reset (); | 
| 1429 |  |  |  |  |  |  | } | 
| 1430 |  |  |  |  |  |  |  | 
| 1431 |  |  |  |  |  |  | # used for hooking AnyEvent::Strict and AnyEvent::Debug::Wrap into the class hierarchy | 
| 1432 |  |  |  |  |  |  | sub _isa_hook($$;$) { | 
| 1433 | 1 |  |  | 1 |  | 6 | my ($i, $pkg, $reset_ae) = @_; | 
| 1434 |  |  |  |  |  |  |  | 
| 1435 | 1 | 50 |  |  |  | 5 | $isa_hook[$i] = $pkg ? [$pkg, $reset_ae] : undef; | 
| 1436 |  |  |  |  |  |  |  | 
| 1437 | 1 |  |  |  |  | 5 | _isa_set; | 
| 1438 |  |  |  |  |  |  | } | 
| 1439 |  |  |  |  |  |  |  | 
| 1440 |  |  |  |  |  |  | # all autoloaded methods reserve the complete glob, not just the method slot. | 
| 1441 |  |  |  |  |  |  | # due to bugs in perls method cache implementation. | 
| 1442 |  |  |  |  |  |  | our @methods = qw(io timer time now now_update signal child idle condvar); | 
| 1443 |  |  |  |  |  |  |  | 
| 1444 |  |  |  |  |  |  | sub detect() { | 
| 1445 | 12 | 50 |  | 12 | 1 | 295 | return $MODEL if $MODEL; # some programs keep references to detect | 
| 1446 |  |  |  |  |  |  |  | 
| 1447 |  |  |  |  |  |  | # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it | 
| 1448 |  |  |  |  |  |  | # the author knows about the problems and what it does to AnyEvent as a whole | 
| 1449 |  |  |  |  |  |  | # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent | 
| 1450 |  |  |  |  |  |  | # anyway. | 
| 1451 |  |  |  |  |  |  | AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n" | 
| 1452 |  |  |  |  |  |  | . "design, abuses internals and breaks AnyEvent - will not continue." | 
| 1453 | 12 | 50 |  |  |  | 105 | if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; | 
| 1454 |  |  |  |  |  |  |  | 
| 1455 | 12 |  |  |  |  | 83 | local $!; # for good measure | 
| 1456 | 12 |  |  |  |  | 54 | local $SIG{__DIE__}; # we use eval | 
| 1457 |  |  |  |  |  |  |  | 
| 1458 |  |  |  |  |  |  | # free some memory | 
| 1459 | 12 |  |  | 4 |  | 102 | *detect = sub () { $MODEL }; | 
|  | 4 |  |  |  |  | 88 |  | 
| 1460 |  |  |  |  |  |  | # undef &func doesn't correctly update the method cache. grmbl. | 
| 1461 |  |  |  |  |  |  | # so we delete the whole glob. grmbl. | 
| 1462 |  |  |  |  |  |  | # otoh, perl doesn't let me undef an active usb, but it lets me free | 
| 1463 |  |  |  |  |  |  | # a glob with an active sub. hrm. i hope it works, but perl is | 
| 1464 |  |  |  |  |  |  | # usually buggy in this department. sigh. | 
| 1465 | 12 |  |  |  |  | 46 | delete @{"AnyEvent::"}{@methods}; | 
|  | 12 |  |  |  |  | 162 |  | 
| 1466 | 12 |  |  |  |  | 40 | undef @methods; | 
| 1467 |  |  |  |  |  |  |  | 
| 1468 | 12 | 50 |  |  |  | 74 | if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { | 
| 1469 | 0 |  |  |  |  | 0 | my $model = $1; | 
| 1470 | 0 | 0 |  |  |  | 0 | $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; | 
| 1471 | 0 | 0 |  |  |  | 0 | if (eval "require $model") { | 
| 1472 | 0 |  |  |  |  | 0 | AnyEvent::log 7 => "Loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it."; | 
| 1473 | 0 |  |  |  |  | 0 | $MODEL = $model; | 
| 1474 |  |  |  |  |  |  | } else { | 
| 1475 | 0 |  |  |  |  | 0 | AnyEvent::log 4 => "Unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@"; | 
| 1476 |  |  |  |  |  |  | } | 
| 1477 |  |  |  |  |  |  | } | 
| 1478 |  |  |  |  |  |  |  | 
| 1479 |  |  |  |  |  |  | # check for already loaded models | 
| 1480 | 12 | 50 |  |  |  | 62 | unless ($MODEL) { | 
| 1481 | 12 |  |  |  |  | 55 | for (@REGISTRY, @models) { | 
| 1482 | 50 |  |  |  |  | 124 | my ($package, $model) = @$_; | 
| 1483 | 50 | 100 |  |  |  | 64 | if (${"$package\::VERSION"} > 0) { | 
|  | 50 |  |  |  |  | 320 |  | 
| 1484 | 10 | 50 |  |  |  | 691 | if (eval "require $model") { | 
| 1485 | 10 |  |  |  |  | 71 | AnyEvent::log 7 => "Autodetected model '$model', using it."; | 
| 1486 | 10 |  |  |  |  | 22 | $MODEL = $model; | 
| 1487 | 10 |  |  |  |  | 27 | last; | 
| 1488 |  |  |  |  |  |  | } else { | 
| 1489 | 0 |  |  |  |  | 0 | AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@"; | 
| 1490 |  |  |  |  |  |  | } | 
| 1491 |  |  |  |  |  |  | } | 
| 1492 |  |  |  |  |  |  | } | 
| 1493 |  |  |  |  |  |  |  | 
| 1494 | 12 | 100 |  |  |  | 54 | unless ($MODEL) { | 
| 1495 |  |  |  |  |  |  | # try to autoload a model | 
| 1496 | 2 |  |  |  |  | 7 | for (@REGISTRY, @models) { | 
| 1497 | 2 |  |  |  |  | 4 | my ($package, $model) = @$_; | 
| 1498 | 2 | 50 | 33 |  |  | 120 | if ( | 
|  |  |  | 33 |  |  |  |  | 
| 1499 |  |  |  |  |  |  | eval "require $package" | 
| 1500 | 2 |  |  |  |  | 4915 | and ${"$package\::VERSION"} > 0 | 
| 1501 |  |  |  |  |  |  | and eval "require $model" | 
| 1502 |  |  |  |  |  |  | ) { | 
| 1503 | 2 |  |  |  |  | 14 | AnyEvent::log 7 => "Autoloaded model '$model', using it."; | 
| 1504 | 2 |  |  |  |  | 5 | $MODEL = $model; | 
| 1505 | 2 |  |  |  |  | 4 | last; | 
| 1506 |  |  |  |  |  |  | } | 
| 1507 |  |  |  |  |  |  | } | 
| 1508 |  |  |  |  |  |  |  | 
| 1509 |  |  |  |  |  |  | $MODEL | 
| 1510 | 2 | 50 |  |  |  | 9 | or AnyEvent::log fatal => "Backend autodetection failed - did you properly install AnyEvent?"; | 
| 1511 |  |  |  |  |  |  | } | 
| 1512 |  |  |  |  |  |  | } | 
| 1513 |  |  |  |  |  |  |  | 
| 1514 |  |  |  |  |  |  | # free memory only needed for probing | 
| 1515 | 12 |  |  |  |  | 185 | undef @models; | 
| 1516 | 12 |  |  |  |  | 30 | undef @REGISTRY; | 
| 1517 |  |  |  |  |  |  |  | 
| 1518 | 12 |  |  |  |  | 24 | push @{"$MODEL\::ISA"}, "AnyEvent::Base"; | 
|  | 12 |  |  |  |  | 181 |  | 
| 1519 |  |  |  |  |  |  |  | 
| 1520 |  |  |  |  |  |  | # now nuke some methods that are overridden by the backend. | 
| 1521 |  |  |  |  |  |  | # SUPER usage is not allowed in these. | 
| 1522 | 12 |  |  |  |  | 49 | for (qw(time signal child idle)) { | 
| 1523 | 18 |  |  |  |  | 161 | undef &{"AnyEvent::Base::$_"} | 
| 1524 | 48 | 100 |  |  |  | 75 | if defined &{"$MODEL\::$_"}; | 
|  | 48 |  |  |  |  | 203 |  | 
| 1525 |  |  |  |  |  |  | } | 
| 1526 |  |  |  |  |  |  |  | 
| 1527 | 12 |  |  |  |  | 57 | _isa_set; | 
| 1528 |  |  |  |  |  |  |  | 
| 1529 |  |  |  |  |  |  | # we're officially open! | 
| 1530 |  |  |  |  |  |  |  | 
| 1531 | 12 | 50 |  |  |  | 55 | if ($ENV{PERL_ANYEVENT_STRICT}) { | 
| 1532 | 0 |  |  |  |  | 0 | require AnyEvent::Strict; | 
| 1533 |  |  |  |  |  |  | } | 
| 1534 |  |  |  |  |  |  |  | 
| 1535 | 12 | 50 |  |  |  | 48 | if ($ENV{PERL_ANYEVENT_DEBUG_WRAP}) { | 
| 1536 | 0 |  |  |  |  | 0 | require AnyEvent::Debug; | 
| 1537 | 0 |  |  |  |  | 0 | AnyEvent::Debug::wrap ($ENV{PERL_ANYEVENT_DEBUG_WRAP}); | 
| 1538 |  |  |  |  |  |  | } | 
| 1539 |  |  |  |  |  |  |  | 
| 1540 | 12 | 50 |  |  |  | 50 | if (length $ENV{PERL_ANYEVENT_DEBUG_SHELL}) { | 
| 1541 | 0 |  |  |  |  | 0 | require AnyEvent::Socket; | 
| 1542 | 0 |  |  |  |  | 0 | require AnyEvent::Debug; | 
| 1543 |  |  |  |  |  |  |  | 
| 1544 | 0 |  |  |  |  | 0 | my $shell = $ENV{PERL_ANYEVENT_DEBUG_SHELL}; | 
| 1545 | 0 |  |  |  |  | 0 | $shell =~ s/\$\$/$$/g; | 
| 1546 |  |  |  |  |  |  |  | 
| 1547 | 0 |  |  |  |  | 0 | my ($host, $service) = AnyEvent::Socket::parse_hostport ($shell); | 
| 1548 | 0 |  |  |  |  | 0 | $AnyEvent::Debug::SHELL = AnyEvent::Debug::shell ($host, $service); | 
| 1549 |  |  |  |  |  |  | } | 
| 1550 |  |  |  |  |  |  |  | 
| 1551 |  |  |  |  |  |  | # now the anyevent environment is set up as the user told us to, so | 
| 1552 |  |  |  |  |  |  | # call the actual user code - post detects | 
| 1553 |  |  |  |  |  |  |  | 
| 1554 | 12 |  |  |  |  | 53 | (shift @post_detect)->() while @post_detect; | 
| 1555 | 12 |  |  |  |  | 26 | undef @post_detect; | 
| 1556 |  |  |  |  |  |  |  | 
| 1557 |  |  |  |  |  |  | *post_detect = sub(&) { | 
| 1558 | 0 |  |  | 1 |  | 0 | shift->(); | 
| 1559 |  |  |  |  |  |  |  | 
| 1560 |  |  |  |  |  |  | undef | 
| 1561 | 12 |  |  |  |  | 83 | }; | 
|  | 0 |  |  |  |  | 0 |  | 
| 1562 |  |  |  |  |  |  |  | 
| 1563 | 12 |  |  |  |  | 73 | $MODEL | 
| 1564 |  |  |  |  |  |  | } | 
| 1565 |  |  |  |  |  |  |  | 
| 1566 |  |  |  |  |  |  | for my $name (@methods) { | 
| 1567 |  |  |  |  |  |  | *$name = sub { | 
| 1568 | 12 |  |  | 11 |  | 1208 | detect; | 
| 1569 |  |  |  |  |  |  | # we use goto because | 
| 1570 |  |  |  |  |  |  | # a) it makes the thunk more transparent | 
| 1571 |  |  |  |  |  |  | # b) it allows us to delete the thunk later | 
| 1572 | 12 |  |  |  |  | 26 | goto &{ UNIVERSAL::can AnyEvent => "SUPER::$name" } | 
|  | 11 |  |  |  |  | 142 |  | 
| 1573 |  |  |  |  |  |  | }; | 
| 1574 |  |  |  |  |  |  | } | 
| 1575 |  |  |  |  |  |  |  | 
| 1576 |  |  |  |  |  |  | # utility function to dup a filehandle. this is used by many backends | 
| 1577 |  |  |  |  |  |  | # to support binding more than one watcher per filehandle (they usually | 
| 1578 |  |  |  |  |  |  | # allow only one watcher per fd, so we dup it to get a different one). | 
| 1579 |  |  |  |  |  |  | sub _dupfh($$;$$) { | 
| 1580 | 0 |  |  | 0 |  | 0 | my ($poll, $fh, $r, $w) = @_; | 
| 1581 |  |  |  |  |  |  |  | 
| 1582 |  |  |  |  |  |  | # cygwin requires the fh mode to be matching, unix doesn't | 
| 1583 | 0 | 0 |  |  |  | 0 | my ($rw, $mode) = $poll eq "r" ? ($r, "<&") : ($w, ">&"); | 
| 1584 |  |  |  |  |  |  |  | 
| 1585 | 0 | 0 |  |  |  | 0 | open my $fh2, $mode, $fh | 
| 1586 |  |  |  |  |  |  | or die "AnyEvent->io: cannot dup() filehandle in mode '$poll': $!,"; | 
| 1587 |  |  |  |  |  |  |  | 
| 1588 |  |  |  |  |  |  | # we assume CLOEXEC is already set by perl in all important cases | 
| 1589 |  |  |  |  |  |  |  | 
| 1590 | 0 |  |  |  |  | 0 | ($fh2, $rw) | 
| 1591 |  |  |  |  |  |  | } | 
| 1592 |  |  |  |  |  |  |  | 
| 1593 |  |  |  |  |  |  | =head1 SIMPLIFIED AE API | 
| 1594 |  |  |  |  |  |  |  | 
| 1595 |  |  |  |  |  |  | Starting with version 5.0, AnyEvent officially supports a second, much | 
| 1596 |  |  |  |  |  |  | simpler, API that is designed to reduce the calling, typing and memory | 
| 1597 |  |  |  |  |  |  | overhead by using function call syntax and a fixed number of parameters. | 
| 1598 |  |  |  |  |  |  |  | 
| 1599 |  |  |  |  |  |  | See the L manpage for details. | 
| 1600 |  |  |  |  |  |  |  | 
| 1601 |  |  |  |  |  |  | =cut | 
| 1602 |  |  |  |  |  |  |  | 
| 1603 |  |  |  |  |  |  | package AE; | 
| 1604 |  |  |  |  |  |  |  | 
| 1605 |  |  |  |  |  |  | our $VERSION = $AnyEvent::VERSION; | 
| 1606 |  |  |  |  |  |  |  | 
| 1607 |  |  |  |  |  |  | sub _reset() { | 
| 1608 | 84 | 50 |  | 84 | 1 | 28940 | eval q{ | 
|  | 2 |  |  | 2 | 1 | 489 |  | 
|  | 2 |  |  | 2 | 1 | 1189 |  | 
|  | 8 |  |  | 8 | 1 | 321 |  | 
|  | 0 |  |  | 0 | 1 | 0 |  | 
|  |  |  |  |  | 1 |  |  | 
|  |  |  |  |  | 1 |  |  | 
|  |  |  |  |  | 1 |  |  | 
| 1609 |  |  |  |  |  |  | # fall back to the main API by default - backends and AnyEvent::Base | 
| 1610 |  |  |  |  |  |  | # implementations can overwrite these. | 
| 1611 |  |  |  |  |  |  |  | 
| 1612 |  |  |  |  |  |  | sub io($$$) { | 
| 1613 |  |  |  |  |  |  | AnyEvent->io (fh => $_[0], poll => $_[1] ? "w" : "r", cb => $_[2]) | 
| 1614 |  |  |  |  |  |  | } | 
| 1615 |  |  |  |  |  |  |  | 
| 1616 |  |  |  |  |  |  | sub timer($$$) { | 
| 1617 |  |  |  |  |  |  | AnyEvent->timer (after => $_[0], interval => $_[1], cb => $_[2]) | 
| 1618 |  |  |  |  |  |  | } | 
| 1619 |  |  |  |  |  |  |  | 
| 1620 |  |  |  |  |  |  | sub signal($$) { | 
| 1621 |  |  |  |  |  |  | AnyEvent->signal (signal => $_[0], cb => $_[1]) | 
| 1622 |  |  |  |  |  |  | } | 
| 1623 |  |  |  |  |  |  |  | 
| 1624 |  |  |  |  |  |  | sub child($$) { | 
| 1625 |  |  |  |  |  |  | AnyEvent->child (pid => $_[0], cb => $_[1]) | 
| 1626 |  |  |  |  |  |  | } | 
| 1627 |  |  |  |  |  |  |  | 
| 1628 |  |  |  |  |  |  | sub idle($) { | 
| 1629 |  |  |  |  |  |  | AnyEvent->idle (cb => $_[0]); | 
| 1630 |  |  |  |  |  |  | } | 
| 1631 |  |  |  |  |  |  |  | 
| 1632 |  |  |  |  |  |  | sub cv(;&) { | 
| 1633 |  |  |  |  |  |  | AnyEvent->condvar (@_ ? (cb => $_[0]) : ()) | 
| 1634 |  |  |  |  |  |  | } | 
| 1635 |  |  |  |  |  |  |  | 
| 1636 |  |  |  |  |  |  | sub now() { | 
| 1637 |  |  |  |  |  |  | AnyEvent->now | 
| 1638 |  |  |  |  |  |  | } | 
| 1639 |  |  |  |  |  |  |  | 
| 1640 |  |  |  |  |  |  | sub now_update() { | 
| 1641 |  |  |  |  |  |  | AnyEvent->now_update | 
| 1642 |  |  |  |  |  |  | } | 
| 1643 |  |  |  |  |  |  |  | 
| 1644 |  |  |  |  |  |  | sub time() { | 
| 1645 |  |  |  |  |  |  | AnyEvent->time | 
| 1646 |  |  |  |  |  |  | } | 
| 1647 |  |  |  |  |  |  |  | 
| 1648 |  |  |  |  |  |  | *postpone = \&AnyEvent::postpone; | 
| 1649 |  |  |  |  |  |  | *log      = \&AnyEvent::log; | 
| 1650 |  |  |  |  |  |  | }; | 
| 1651 | 84 | 50 |  |  |  | 128357 | die if $@; | 
| 1652 |  |  |  |  |  |  | } | 
| 1653 |  |  |  |  |  |  |  | 
| 1654 | 82 |  |  | 82 |  | 9006 | BEGIN { _reset } | 
| 1655 |  |  |  |  |  |  |  | 
| 1656 |  |  |  |  |  |  | package AnyEvent::Base; | 
| 1657 |  |  |  |  |  |  |  | 
| 1658 |  |  |  |  |  |  | # default implementations for many methods | 
| 1659 |  |  |  |  |  |  |  | 
| 1660 |  |  |  |  |  |  | sub time { | 
| 1661 | 0 |  |  | 0 |  | 0 | eval q{ # poor man's autoloading {} | 
| 1662 |  |  |  |  |  |  | # probe for availability of Time::HiRes | 
| 1663 |  |  |  |  |  |  | if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { | 
| 1664 |  |  |  |  |  |  | *time     = sub { Time::HiRes::time () }; | 
| 1665 |  |  |  |  |  |  | *AE::time = \&    Time::HiRes::time     ; | 
| 1666 |  |  |  |  |  |  | *now      = \&time; | 
| 1667 |  |  |  |  |  |  | AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy."; | 
| 1668 |  |  |  |  |  |  | # if (eval "use POSIX (); (POSIX::times())... | 
| 1669 |  |  |  |  |  |  | } else { | 
| 1670 |  |  |  |  |  |  | *time     = sub   { CORE::time }; | 
| 1671 |  |  |  |  |  |  | *AE::time = sub (){ CORE::time }; | 
| 1672 |  |  |  |  |  |  | *now      = \&time; | 
| 1673 |  |  |  |  |  |  | AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!"; | 
| 1674 |  |  |  |  |  |  | } | 
| 1675 |  |  |  |  |  |  | }; | 
| 1676 | 0 | 0 |  |  |  | 0 | die if $@; | 
| 1677 |  |  |  |  |  |  |  | 
| 1678 | 0 |  |  |  |  | 0 | &time | 
| 1679 |  |  |  |  |  |  | } | 
| 1680 |  |  |  |  |  |  |  | 
| 1681 |  |  |  |  |  |  | *now = \&time; | 
| 1682 |  |  |  | 0 |  |  | sub now_update { } | 
| 1683 |  |  |  |  |  |  |  | 
| 1684 |  |  |  |  |  |  | sub _poll { | 
| 1685 | 0 |  |  | 0 |  | 0 | Carp::croak "$AnyEvent::MODEL does not support blocking waits. Caught"; | 
| 1686 |  |  |  |  |  |  | } | 
| 1687 |  |  |  |  |  |  |  | 
| 1688 |  |  |  |  |  |  | # default implementation for ->condvar | 
| 1689 |  |  |  |  |  |  | # in fact, the default should not be overwritten | 
| 1690 |  |  |  |  |  |  |  | 
| 1691 |  |  |  |  |  |  | sub condvar { | 
| 1692 | 12 | 100 |  | 12 |  | 3005 | eval q{ # poor man's autoloading {} | 
|  | 56 | 100 |  | 56 |  | 6062 |  | 
|  | 69 |  |  |  |  | 21806 |  | 
| 1693 |  |  |  |  |  |  | *condvar = sub { | 
| 1694 |  |  |  |  |  |  | bless { @_ == 3 ? (_ae_cb => $_[2]) : () }, "AnyEvent::CondVar" | 
| 1695 |  |  |  |  |  |  | }; | 
| 1696 |  |  |  |  |  |  |  | 
| 1697 |  |  |  |  |  |  | *AE::cv = sub (;&) { | 
| 1698 |  |  |  |  |  |  | bless { @_ ? (_ae_cb => shift) : () }, "AnyEvent::CondVar" | 
| 1699 |  |  |  |  |  |  | }; | 
| 1700 |  |  |  |  |  |  | }; | 
| 1701 | 12 | 50 |  |  |  | 77 | die if $@; | 
| 1702 |  |  |  |  |  |  |  | 
| 1703 | 12 |  |  |  |  | 253 | &condvar | 
| 1704 |  |  |  |  |  |  | } | 
| 1705 |  |  |  |  |  |  |  | 
| 1706 |  |  |  |  |  |  | # default implementation for ->signal | 
| 1707 |  |  |  |  |  |  |  | 
| 1708 |  |  |  |  |  |  | our $HAVE_ASYNC_INTERRUPT; | 
| 1709 |  |  |  |  |  |  |  | 
| 1710 |  |  |  |  |  |  | sub _have_async_interrupt() { | 
| 1711 |  |  |  |  |  |  | $HAVE_ASYNC_INTERRUPT = 1*(!$ENV{PERL_ANYEVENT_AVOID_ASYNC_INTERRUPT} | 
| 1712 | 6 | 100 | 33 | 6 |  | 322 | && eval "use Async::Interrupt 1.02 (); 1") | 
|  | 15 |  |  | 0 |  | 499 |  | 
|  | 12 |  |  |  |  | 77 |  | 
|  | 12 |  |  |  |  | 215 |  | 
| 1713 |  |  |  |  |  |  | unless defined $HAVE_ASYNC_INTERRUPT; | 
| 1714 |  |  |  |  |  |  |  | 
| 1715 | 6 |  |  |  |  | 140 | $HAVE_ASYNC_INTERRUPT | 
| 1716 |  |  |  |  |  |  | } | 
| 1717 |  |  |  |  |  |  |  | 
| 1718 |  |  |  |  |  |  | our ($SIGPIPE_R, $SIGPIPE_W, %SIG_CB, %SIG_EV, $SIG_IO); | 
| 1719 |  |  |  |  |  |  | our (%SIG_ASY, %SIG_ASY_W); | 
| 1720 |  |  |  |  |  |  | our ($SIG_COUNT, $SIG_TW); | 
| 1721 |  |  |  |  |  |  |  | 
| 1722 |  |  |  |  |  |  | # install a dummy wakeup watcher to reduce signal catching latency | 
| 1723 |  |  |  |  |  |  | # used by Impls | 
| 1724 |  |  |  |  |  |  | sub _sig_add() { | 
| 1725 | 0 | 0 |  | 0 |  | 0 | unless ($SIG_COUNT++) { | 
| 1726 |  |  |  |  |  |  | # try to align timer on a full-second boundary, if possible | 
| 1727 | 0 |  |  |  |  | 0 | my $NOW = AE::now; | 
| 1728 |  |  |  |  |  |  |  | 
| 1729 |  |  |  |  |  |  | $SIG_TW = AE::timer | 
| 1730 |  |  |  |  |  |  | $MAX_SIGNAL_LATENCY - ($NOW - int $NOW), | 
| 1731 |  |  |  |  |  |  | $MAX_SIGNAL_LATENCY, | 
| 1732 |  |  |  | 0 |  |  | sub { } # just for the PERL_ASYNC_CHECK | 
| 1733 | 0 |  |  |  |  | 0 | ; | 
| 1734 |  |  |  |  |  |  | } | 
| 1735 |  |  |  |  |  |  | } | 
| 1736 |  |  |  |  |  |  |  | 
| 1737 |  |  |  |  |  |  | sub _sig_del { | 
| 1738 | 9 | 50 |  | 9 |  | 196 | undef $SIG_TW | 
| 1739 |  |  |  |  |  |  | unless --$SIG_COUNT; | 
| 1740 |  |  |  |  |  |  | } | 
| 1741 |  |  |  |  |  |  |  | 
| 1742 |  |  |  |  |  |  | our $_sig_name_init; $_sig_name_init = sub { | 
| 1743 |  |  |  |  |  |  | eval q{ # poor man's autoloading {} | 
| 1744 |  |  |  |  |  |  | undef $_sig_name_init; | 
| 1745 |  |  |  |  |  |  |  | 
| 1746 |  |  |  |  |  |  | if (_have_async_interrupt) { | 
| 1747 |  |  |  |  |  |  | *sig2num  = \&Async::Interrupt::sig2num; | 
| 1748 |  |  |  |  |  |  | *sig2name = \&Async::Interrupt::sig2name; | 
| 1749 |  |  |  |  |  |  | } else { | 
| 1750 |  |  |  |  |  |  | require Config; | 
| 1751 |  |  |  |  |  |  |  | 
| 1752 |  |  |  |  |  |  | my %signame2num; | 
| 1753 |  |  |  |  |  |  | @signame2num{ split ' ', $Config::Config{sig_name} } | 
| 1754 |  |  |  |  |  |  | = split ' ', $Config::Config{sig_num}; | 
| 1755 |  |  |  |  |  |  |  | 
| 1756 |  |  |  |  |  |  | my @signum2name; | 
| 1757 |  |  |  |  |  |  | @signum2name[values %signame2num] = keys %signame2num; | 
| 1758 |  |  |  |  |  |  |  | 
| 1759 |  |  |  |  |  |  | *sig2num = sub($) { | 
| 1760 |  |  |  |  |  |  | $_[0] > 0 ? shift : $signame2num{+shift} | 
| 1761 |  |  |  |  |  |  | }; | 
| 1762 |  |  |  |  |  |  | *sig2name = sub ($) { | 
| 1763 |  |  |  |  |  |  | $_[0] > 0 ? $signum2name[+shift] : shift | 
| 1764 |  |  |  |  |  |  | }; | 
| 1765 |  |  |  |  |  |  | } | 
| 1766 |  |  |  |  |  |  | }; | 
| 1767 |  |  |  |  |  |  | die if $@; | 
| 1768 |  |  |  |  |  |  | }; | 
| 1769 |  |  |  |  |  |  |  | 
| 1770 | 3 |  |  | 3 |  | 18 | sub sig2num ($) { &$_sig_name_init; &sig2num  } | 
|  | 3 |  |  |  |  | 70 |  | 
| 1771 | 0 |  |  | 0 |  | 0 | sub sig2name($) { &$_sig_name_init; &sig2name } | 
|  | 0 |  |  |  |  | 0 |  | 
| 1772 |  |  |  |  |  |  |  | 
| 1773 |  |  |  |  |  |  | sub signal { | 
| 1774 | 16 | 100 |  | 16 |  | 3120 | eval q{ # poor man's autoloading {} | 
|  | 12 |  |  | 0 |  | 78 |  | 
|  | 12 |  |  |  |  | 85 |  | 
|  | 12 |  |  |  |  | 337 |  | 
|  | 12 |  |  |  |  | 1371 |  | 
|  | 12 |  |  |  |  | 54 |  | 
|  | 12 |  |  |  |  | 66 |  | 
|  | 12 |  |  |  |  | 337 |  | 
|  | 12 |  |  |  |  | 105 |  | 
|  | 6 |  |  |  |  | 262 |  | 
|  | 6 |  |  |  |  | 21 |  | 
|  | 12 |  |  |  |  | 222 |  | 
| 1775 |  |  |  |  |  |  | # probe for availability of Async::Interrupt | 
| 1776 |  |  |  |  |  |  | if (_have_async_interrupt) { | 
| 1777 |  |  |  |  |  |  | AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling."; | 
| 1778 |  |  |  |  |  |  |  | 
| 1779 |  |  |  |  |  |  | $SIGPIPE_R = new Async::Interrupt::EventPipe; | 
| 1780 |  |  |  |  |  |  | $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; | 
| 1781 |  |  |  |  |  |  |  | 
| 1782 |  |  |  |  |  |  | } else { | 
| 1783 |  |  |  |  |  |  | AnyEvent::log 8 => "Using emulated perl signal handling with latency timer."; | 
| 1784 |  |  |  |  |  |  |  | 
| 1785 |  |  |  |  |  |  | if (AnyEvent::WIN32) { | 
| 1786 |  |  |  |  |  |  | require AnyEvent::Util; | 
| 1787 |  |  |  |  |  |  |  | 
| 1788 |  |  |  |  |  |  | ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); | 
| 1789 |  |  |  |  |  |  | AnyEvent::Util::fh_nonblocking ($SIGPIPE_R, 1) if $SIGPIPE_R; | 
| 1790 |  |  |  |  |  |  | AnyEvent::Util::fh_nonblocking ($SIGPIPE_W, 1) if $SIGPIPE_W; # just in case | 
| 1791 |  |  |  |  |  |  | } else { | 
| 1792 |  |  |  |  |  |  | pipe $SIGPIPE_R, $SIGPIPE_W; | 
| 1793 |  |  |  |  |  |  | fcntl $SIGPIPE_R, AnyEvent::F_SETFL, AnyEvent::O_NONBLOCK if $SIGPIPE_R; | 
| 1794 |  |  |  |  |  |  | fcntl $SIGPIPE_W, AnyEvent::F_SETFL, AnyEvent::O_NONBLOCK if $SIGPIPE_W; # just in case | 
| 1795 |  |  |  |  |  |  |  | 
| 1796 |  |  |  |  |  |  | # not strictly required, as $^F is normally 2, but let's make sure... | 
| 1797 |  |  |  |  |  |  | fcntl $SIGPIPE_R, AnyEvent::F_SETFD, AnyEvent::FD_CLOEXEC; | 
| 1798 |  |  |  |  |  |  | fcntl $SIGPIPE_W, AnyEvent::F_SETFD, AnyEvent::FD_CLOEXEC; | 
| 1799 |  |  |  |  |  |  | } | 
| 1800 |  |  |  |  |  |  |  | 
| 1801 |  |  |  |  |  |  | $SIGPIPE_R | 
| 1802 |  |  |  |  |  |  | or Carp::croak "AnyEvent: unable to create a signal reporting pipe: $!\n"; | 
| 1803 |  |  |  |  |  |  |  | 
| 1804 |  |  |  |  |  |  | $SIG_IO = AE::io $SIGPIPE_R, 0, \&_signal_exec; | 
| 1805 |  |  |  |  |  |  | } | 
| 1806 |  |  |  |  |  |  |  | 
| 1807 |  |  |  |  |  |  | *signal = $HAVE_ASYNC_INTERRUPT | 
| 1808 |  |  |  |  |  |  | ? sub { | 
| 1809 |  |  |  |  |  |  | my (undef, %arg) = @_; | 
| 1810 |  |  |  |  |  |  |  | 
| 1811 |  |  |  |  |  |  | # async::interrupt | 
| 1812 |  |  |  |  |  |  | my $signal = sig2num $arg{signal}; | 
| 1813 |  |  |  |  |  |  | $SIG_CB{$signal}{$arg{cb}} = $arg{cb}; | 
| 1814 |  |  |  |  |  |  |  | 
| 1815 |  |  |  |  |  |  | $SIG_ASY{$signal} ||= new Async::Interrupt | 
| 1816 |  |  |  |  |  |  | cb             => sub { undef $SIG_EV{$signal} }, | 
| 1817 |  |  |  |  |  |  | signal         => $signal, | 
| 1818 |  |  |  |  |  |  | pipe           => [$SIGPIPE_R->filenos], | 
| 1819 |  |  |  |  |  |  | pipe_autodrain => 0, | 
| 1820 |  |  |  |  |  |  | ; | 
| 1821 |  |  |  |  |  |  |  | 
| 1822 |  |  |  |  |  |  | bless [$signal, $arg{cb}], "AnyEvent::Base::signal" | 
| 1823 |  |  |  |  |  |  | } | 
| 1824 |  |  |  |  |  |  | : sub { | 
| 1825 |  |  |  |  |  |  | my (undef, %arg) = @_; | 
| 1826 |  |  |  |  |  |  |  | 
| 1827 |  |  |  |  |  |  | # pure perl | 
| 1828 |  |  |  |  |  |  | my $signal = sig2name $arg{signal}; | 
| 1829 |  |  |  |  |  |  | $SIG_CB{$signal}{$arg{cb}} = $arg{cb}; | 
| 1830 |  |  |  |  |  |  |  | 
| 1831 |  |  |  |  |  |  | $SIG{$signal} ||= sub { | 
| 1832 |  |  |  |  |  |  | local $!; | 
| 1833 |  |  |  |  |  |  | syswrite $SIGPIPE_W, "\x00", 1 unless %SIG_EV; | 
| 1834 |  |  |  |  |  |  | undef $SIG_EV{$signal}; | 
| 1835 |  |  |  |  |  |  | }; | 
| 1836 |  |  |  |  |  |  |  | 
| 1837 |  |  |  |  |  |  | # can't do signal processing without introducing races in pure perl, | 
| 1838 |  |  |  |  |  |  | # so limit the signal latency. | 
| 1839 |  |  |  |  |  |  | _sig_add; | 
| 1840 |  |  |  |  |  |  |  | 
| 1841 |  |  |  |  |  |  | bless [$signal, $arg{cb}], "AnyEvent::Base::signal" | 
| 1842 |  |  |  |  |  |  | } | 
| 1843 |  |  |  |  |  |  | ; | 
| 1844 |  |  |  |  |  |  |  | 
| 1845 |  |  |  |  |  |  | *AnyEvent::Base::signal::DESTROY = sub { | 
| 1846 |  |  |  |  |  |  | my ($signal, $cb) = @{$_[0]}; | 
| 1847 |  |  |  |  |  |  |  | 
| 1848 |  |  |  |  |  |  | _sig_del; | 
| 1849 |  |  |  |  |  |  |  | 
| 1850 |  |  |  |  |  |  | delete $SIG_CB{$signal}{$cb}; | 
| 1851 |  |  |  |  |  |  |  | 
| 1852 |  |  |  |  |  |  | $HAVE_ASYNC_INTERRUPT | 
| 1853 |  |  |  |  |  |  | ? delete $SIG_ASY{$signal} | 
| 1854 |  |  |  |  |  |  | : # delete doesn't work with older perls - they then | 
| 1855 |  |  |  |  |  |  | # print weird messages, or just unconditionally exit | 
| 1856 |  |  |  |  |  |  | # instead of getting the default action. | 
| 1857 |  |  |  |  |  |  | undef $SIG{$signal} | 
| 1858 |  |  |  |  |  |  | unless keys %{ $SIG_CB{$signal} }; | 
| 1859 |  |  |  |  |  |  | }; | 
| 1860 |  |  |  |  |  |  |  | 
| 1861 |  |  |  |  |  |  | *_signal_exec = sub { | 
| 1862 |  |  |  |  |  |  | $HAVE_ASYNC_INTERRUPT | 
| 1863 |  |  |  |  |  |  | ? $SIGPIPE_R->drain | 
| 1864 |  |  |  |  |  |  | : sysread $SIGPIPE_R, (my $dummy), 9; | 
| 1865 |  |  |  |  |  |  |  | 
| 1866 |  |  |  |  |  |  | while (%SIG_EV) { | 
| 1867 |  |  |  |  |  |  | for (keys %SIG_EV) { | 
| 1868 |  |  |  |  |  |  | delete $SIG_EV{$_}; | 
| 1869 |  |  |  |  |  |  | &$_ for values %{ $SIG_CB{$_} || {} }; | 
| 1870 |  |  |  |  |  |  | } | 
| 1871 |  |  |  |  |  |  | } | 
| 1872 |  |  |  |  |  |  | }; | 
| 1873 |  |  |  |  |  |  | }; | 
| 1874 | 12 | 100 |  |  |  | 123 | die if $@; | 
| 1875 |  |  |  |  |  |  |  | 
| 1876 | 12 |  |  |  |  | 125 | &signal | 
| 1877 |  |  |  |  |  |  | } | 
| 1878 |  |  |  |  |  |  |  | 
| 1879 |  |  |  |  |  |  | # default implementation for ->child | 
| 1880 |  |  |  |  |  |  |  | 
| 1881 |  |  |  |  |  |  | our %PID_CB; | 
| 1882 |  |  |  |  |  |  | our $CHLD_W; | 
| 1883 |  |  |  |  |  |  | our $CHLD_DELAY_W; | 
| 1884 |  |  |  |  |  |  |  | 
| 1885 |  |  |  |  |  |  | # used by many Impl's | 
| 1886 |  |  |  |  |  |  | sub _emit_childstatus($$) { | 
| 1887 | 20 |  |  | 11 |  | 271 | my (undef, $rpid, $rstatus) = @_; | 
| 1888 |  |  |  |  |  |  |  | 
| 1889 |  |  |  |  |  |  | $_->($rpid, $rstatus) | 
| 1890 | 20 | 100 |  |  |  | 725 | for values %{ $PID_CB{$rpid} || {} }, | 
|  | 20 |  |  |  |  | 904 |  | 
| 1891 | 24 | 100 |  |  |  | 318 | values %{ $PID_CB{0}     || {} }; | 
| 1892 |  |  |  |  |  |  | } | 
| 1893 |  |  |  |  |  |  |  | 
| 1894 |  |  |  |  |  |  | sub child { | 
| 1895 | 15 |  |  | 2 |  | 1472 | eval q{ # poor man's autoloading {} | 
|  |  |  |  | 0 |  |  |  | 
| 1896 |  |  |  |  |  |  | *_sigchld = sub { | 
| 1897 |  |  |  |  |  |  | my $pid; | 
| 1898 |  |  |  |  |  |  |  | 
| 1899 |  |  |  |  |  |  | AnyEvent->_emit_childstatus ($pid, $?) | 
| 1900 |  |  |  |  |  |  | while ($pid = waitpid -1, WNOHANG) > 0; | 
| 1901 |  |  |  |  |  |  | }; | 
| 1902 |  |  |  |  |  |  |  | 
| 1903 |  |  |  |  |  |  | *child = sub { | 
| 1904 |  |  |  |  |  |  | my (undef, %arg) = @_; | 
| 1905 |  |  |  |  |  |  |  | 
| 1906 |  |  |  |  |  |  | my $pid = $arg{pid}; | 
| 1907 |  |  |  |  |  |  | my $cb  = $arg{cb}; | 
| 1908 |  |  |  |  |  |  |  | 
| 1909 |  |  |  |  |  |  | $PID_CB{$pid}{$cb+0} = $cb; | 
| 1910 |  |  |  |  |  |  |  | 
| 1911 |  |  |  |  |  |  | unless ($CHLD_W) { | 
| 1912 |  |  |  |  |  |  | $CHLD_W = AE::signal CHLD => \&_sigchld; | 
| 1913 |  |  |  |  |  |  | # child could be a zombie already, so make at least one round | 
| 1914 |  |  |  |  |  |  | &_sigchld; | 
| 1915 |  |  |  |  |  |  | } | 
| 1916 |  |  |  |  |  |  |  | 
| 1917 |  |  |  |  |  |  | bless [$pid, $cb+0], "AnyEvent::Base::child" | 
| 1918 |  |  |  |  |  |  | }; | 
| 1919 |  |  |  |  |  |  |  | 
| 1920 |  |  |  |  |  |  | *AnyEvent::Base::child::DESTROY = sub { | 
| 1921 |  |  |  |  |  |  | my ($pid, $icb) = @{$_[0]}; | 
| 1922 |  |  |  |  |  |  |  | 
| 1923 |  |  |  |  |  |  | delete $PID_CB{$pid}{$icb}; | 
| 1924 |  |  |  |  |  |  | delete $PID_CB{$pid} unless keys %{ $PID_CB{$pid} }; | 
| 1925 |  |  |  |  |  |  |  | 
| 1926 |  |  |  |  |  |  | undef $CHLD_W unless keys %PID_CB; | 
| 1927 |  |  |  |  |  |  | }; | 
| 1928 |  |  |  |  |  |  | }; | 
| 1929 | 15 | 100 |  |  |  | 113 | die if $@; | 
| 1930 |  |  |  |  |  |  |  | 
| 1931 | 15 |  |  |  |  | 163 | &child | 
| 1932 |  |  |  |  |  |  | } | 
| 1933 |  |  |  |  |  |  |  | 
| 1934 |  |  |  |  |  |  | # idle emulation is done by simply using a timer, regardless | 
| 1935 |  |  |  |  |  |  | # of whether the process is idle or not, and not letting | 
| 1936 |  |  |  |  |  |  | # the callback use more than 50% of the time. | 
| 1937 |  |  |  |  |  |  | sub idle { | 
| 1938 | 12 |  |  | 0 |  | 263 | eval q{ # poor man's autoloading {} | 
| 1939 |  |  |  |  |  |  | *idle = sub { | 
| 1940 |  |  |  |  |  |  | my (undef, %arg) = @_; | 
| 1941 |  |  |  |  |  |  |  | 
| 1942 |  |  |  |  |  |  | my ($cb, $w, $rcb) = $arg{cb}; | 
| 1943 |  |  |  |  |  |  |  | 
| 1944 |  |  |  |  |  |  | $rcb = sub { | 
| 1945 |  |  |  |  |  |  | if ($cb) { | 
| 1946 |  |  |  |  |  |  | $w = AE::time; | 
| 1947 |  |  |  |  |  |  | &$cb; | 
| 1948 |  |  |  |  |  |  | $w = AE::time - $w; | 
| 1949 |  |  |  |  |  |  |  | 
| 1950 |  |  |  |  |  |  | # never use more then 50% of the time for the idle watcher, | 
| 1951 |  |  |  |  |  |  | # within some limits | 
| 1952 |  |  |  |  |  |  | $w = 0.0001 if $w < 0.0001; | 
| 1953 |  |  |  |  |  |  | $w = 5      if $w > 5; | 
| 1954 |  |  |  |  |  |  |  | 
| 1955 |  |  |  |  |  |  | $w = AE::timer $w, 0, $rcb; | 
| 1956 |  |  |  |  |  |  | } else { | 
| 1957 |  |  |  |  |  |  | # clean up... | 
| 1958 |  |  |  |  |  |  | undef $w; | 
| 1959 |  |  |  |  |  |  | undef $rcb; | 
| 1960 |  |  |  |  |  |  | } | 
| 1961 |  |  |  |  |  |  | }; | 
| 1962 |  |  |  |  |  |  |  | 
| 1963 |  |  |  |  |  |  | $w = AE::timer 0.05, 0, $rcb; | 
| 1964 |  |  |  |  |  |  |  | 
| 1965 |  |  |  |  |  |  | bless \\$cb, "AnyEvent::Base::idle" | 
| 1966 |  |  |  |  |  |  | }; | 
| 1967 |  |  |  |  |  |  |  | 
| 1968 |  |  |  |  |  |  | *AnyEvent::Base::idle::DESTROY = sub { | 
| 1969 |  |  |  |  |  |  | undef $${$_[0]}; | 
| 1970 |  |  |  |  |  |  | }; | 
| 1971 |  |  |  |  |  |  | }; | 
| 1972 | 13 | 0 |  |  |  | 458 | die if $@; | 
| 1973 |  |  |  |  |  |  |  | 
| 1974 | 8 |  |  |  |  | 91 | &idle | 
| 1975 |  |  |  |  |  |  | } | 
| 1976 |  |  |  |  |  |  |  | 
| 1977 |  |  |  |  |  |  | package AnyEvent::CondVar; | 
| 1978 |  |  |  |  |  |  |  | 
| 1979 |  |  |  |  |  |  | our @ISA = AnyEvent::CondVar::Base::; | 
| 1980 |  |  |  |  |  |  |  | 
| 1981 |  |  |  |  |  |  | # only to be used for subclassing | 
| 1982 |  |  |  |  |  |  | sub new { | 
| 1983 | 8 |  |  | 0 |  | 52 | my $class = shift; | 
| 1984 | 8 |  |  |  |  | 76 | bless AnyEvent->condvar (@_), $class | 
| 1985 |  |  |  |  |  |  | } | 
| 1986 |  |  |  |  |  |  |  | 
| 1987 |  |  |  |  |  |  | package AnyEvent::CondVar::Base; | 
| 1988 |  |  |  |  |  |  |  | 
| 1989 |  |  |  |  |  |  | #use overload | 
| 1990 |  |  |  |  |  |  | #   '&{}'    => sub { my $self = shift; sub { $self->send (@_) } }, | 
| 1991 |  |  |  |  |  |  | #   fallback => 1; | 
| 1992 |  |  |  |  |  |  |  | 
| 1993 |  |  |  |  |  |  | # save 300+ kilobytes by dirtily hardcoding overloading | 
| 1994 |  |  |  |  |  |  | ${"AnyEvent::CondVar::Base::OVERLOAD"}{dummy}++; # Register with magic by touching. | 
| 1995 |  |  |  | 0 |  |  | *{'AnyEvent::CondVar::Base::()'}   = sub { }; # "Make it findable via fetchmethod." | 
| 1996 | 44 |  |  | 36 |  | 157 | *{'AnyEvent::CondVar::Base::(&{}'} = sub { my $self = shift; sub { $self->send (@_) } }; # &{} | 
|  | 44 |  |  |  |  | 302 |  | 
|  | 44 |  |  |  |  | 485 |  | 
| 1997 |  |  |  |  |  |  | ${'AnyEvent::CondVar::Base::()'}   = 1; # fallback | 
| 1998 |  |  |  |  |  |  |  | 
| 1999 |  |  |  |  |  |  | our $WAITING; | 
| 2000 |  |  |  |  |  |  |  | 
| 2001 |  |  |  | 88 |  |  | sub _send { | 
| 2002 |  |  |  |  |  |  | # nop | 
| 2003 |  |  |  |  |  |  | } | 
| 2004 |  |  |  |  |  |  |  | 
| 2005 |  |  |  |  |  |  | sub _wait { | 
| 2006 |  |  |  |  |  |  | AnyEvent->_poll until $_[0]{_ae_sent}; | 
| 2007 |  |  |  |  |  |  | } | 
| 2008 |  |  |  |  |  |  |  | 
| 2009 |  |  |  |  |  |  | sub send { | 
| 2010 | 88 |  |  | 88 |  | 6987 | my $cv = shift; | 
| 2011 | 88 |  |  |  |  | 412 | $cv->{_ae_sent} = [@_]; | 
| 2012 | 88 | 100 |  |  |  | 336 | (delete $cv->{_ae_cb})->($cv) if $cv->{_ae_cb}; | 
| 2013 | 88 |  |  |  |  | 468 | $cv->_send; | 
| 2014 |  |  |  |  |  |  | } | 
| 2015 |  |  |  |  |  |  |  | 
| 2016 |  |  |  |  |  |  | sub croak { | 
| 2017 | 1 |  |  | 1 |  | 19 | $_[0]{_ae_croak} = $_[1]; | 
| 2018 | 1 |  |  |  |  | 5 | $_[0]->send; | 
| 2019 |  |  |  |  |  |  | } | 
| 2020 |  |  |  |  |  |  |  | 
| 2021 |  |  |  |  |  |  | sub ready { | 
| 2022 |  |  |  |  |  |  | $_[0]{_ae_sent} | 
| 2023 | 2 |  |  | 2 |  | 14 | } | 
| 2024 |  |  |  |  |  |  |  | 
| 2025 |  |  |  |  |  |  | sub recv { | 
| 2026 | 84 | 100 |  | 84 |  | 1088 | unless ($_[0]{_ae_sent}) { | 
| 2027 | 43 | 50 |  |  |  | 141 | $WAITING | 
| 2028 |  |  |  |  |  |  | and Carp::croak "AnyEvent::CondVar: recursive blocking wait attempted"; | 
| 2029 |  |  |  |  |  |  |  | 
| 2030 | 43 |  |  |  |  | 154 | local $WAITING = 1; | 
| 2031 | 43 |  |  |  |  | 315 | $_[0]->_wait; | 
| 2032 |  |  |  |  |  |  | } | 
| 2033 |  |  |  |  |  |  |  | 
| 2034 |  |  |  |  |  |  | $_[0]{_ae_croak} | 
| 2035 | 84 | 100 |  |  |  | 556 | and Carp::croak $_[0]{_ae_croak}; | 
| 2036 |  |  |  |  |  |  |  | 
| 2037 |  |  |  |  |  |  | wantarray | 
| 2038 | 34 |  |  |  |  | 176 | ? @{ $_[0]{_ae_sent} } | 
| 2039 | 82 | 100 |  |  |  | 335 | : $_[0]{_ae_sent}[0] | 
| 2040 |  |  |  |  |  |  | } | 
| 2041 |  |  |  |  |  |  |  | 
| 2042 |  |  |  |  |  |  | sub cb { | 
| 2043 | 2 |  |  | 2 |  | 27 | my $cv = shift; | 
| 2044 |  |  |  |  |  |  |  | 
| 2045 |  |  |  |  |  |  | @_ | 
| 2046 |  |  |  |  |  |  | and $cv->{_ae_cb} = shift | 
| 2047 |  |  |  |  |  |  | and $cv->{_ae_sent} | 
| 2048 | 2 | 50 | 100 |  |  | 55 | and (delete $cv->{_ae_cb})->($cv); | 
|  |  |  | 33 |  |  |  |  | 
| 2049 |  |  |  |  |  |  |  | 
| 2050 |  |  |  |  |  |  | $cv->{_ae_cb} | 
| 2051 | 2 |  |  |  |  | 5 | } | 
| 2052 |  |  |  |  |  |  |  | 
| 2053 |  |  |  |  |  |  | sub begin { | 
| 2054 | 25 |  |  | 25 |  | 1233 | ++$_[0]{_ae_counter}; | 
| 2055 | 25 | 100 |  |  |  | 88 | $_[0]{_ae_end_cb} = $_[1] if @_ > 1; | 
| 2056 |  |  |  |  |  |  | } | 
| 2057 |  |  |  |  |  |  |  | 
| 2058 |  |  |  |  |  |  | sub end { | 
| 2059 | 25 | 100 |  | 25 |  | 115333 | return if --$_[0]{_ae_counter}; | 
| 2060 | 12 | 100 |  | 11 |  | 26 | &{ $_[0]{_ae_end_cb} || sub { $_[0]->send } }; | 
|  | 12 |  |  |  |  | 139 |  | 
|  | 11 |  |  |  |  | 59 |  | 
| 2061 |  |  |  |  |  |  | } | 
| 2062 |  |  |  |  |  |  |  | 
| 2063 |  |  |  |  |  |  | # undocumented/compatibility with pre-3.4 | 
| 2064 |  |  |  |  |  |  | *broadcast = \&send; | 
| 2065 |  |  |  |  |  |  | *wait      = \&recv; | 
| 2066 |  |  |  |  |  |  |  | 
| 2067 |  |  |  |  |  |  | =head1 ERROR AND EXCEPTION HANDLING | 
| 2068 |  |  |  |  |  |  |  | 
| 2069 |  |  |  |  |  |  | In general, AnyEvent does not do any error handling - it relies on the | 
| 2070 |  |  |  |  |  |  | caller to do that if required. The L module (see also | 
| 2071 |  |  |  |  |  |  | the C environment variable, below) provides strict | 
| 2072 |  |  |  |  |  |  | checking of all AnyEvent methods, however, which is highly useful during | 
| 2073 |  |  |  |  |  |  | development. | 
| 2074 |  |  |  |  |  |  |  | 
| 2075 |  |  |  |  |  |  | As for exception handling (i.e. runtime errors and exceptions thrown while | 
| 2076 |  |  |  |  |  |  | executing a callback), this is not only highly event-loop specific, but | 
| 2077 |  |  |  |  |  |  | also not in any way wrapped by this module, as this is the job of the main | 
| 2078 |  |  |  |  |  |  | program. | 
| 2079 |  |  |  |  |  |  |  | 
| 2080 |  |  |  |  |  |  | The pure perl event loop simply re-throws the exception (usually | 
| 2081 |  |  |  |  |  |  | within C<< condvar->recv >>), the L and L modules call C<< | 
| 2082 |  |  |  |  |  |  | $Event/EV::DIED->() >>, L uses C<< install_exception_handler >> and | 
| 2083 |  |  |  |  |  |  | so on. | 
| 2084 |  |  |  |  |  |  |  | 
| 2085 |  |  |  |  |  |  | =head1 ENVIRONMENT VARIABLES | 
| 2086 |  |  |  |  |  |  |  | 
| 2087 |  |  |  |  |  |  | AnyEvent supports a number of environment variables that tune the | 
| 2088 |  |  |  |  |  |  | runtime behaviour. They are usually evaluated when AnyEvent is | 
| 2089 |  |  |  |  |  |  | loaded, initialised, or a submodule that uses them is loaded. Many of | 
| 2090 |  |  |  |  |  |  | them also cause AnyEvent to load additional modules - for example, | 
| 2091 |  |  |  |  |  |  | C causes the L module to be | 
| 2092 |  |  |  |  |  |  | loaded. | 
| 2093 |  |  |  |  |  |  |  | 
| 2094 |  |  |  |  |  |  | All the environment variables documented here start with | 
| 2095 |  |  |  |  |  |  | C, which is what AnyEvent considers its own | 
| 2096 |  |  |  |  |  |  | namespace. Other modules are encouraged (but by no means required) to use | 
| 2097 |  |  |  |  |  |  | C if they have registered the AnyEvent::Submodule | 
| 2098 |  |  |  |  |  |  | namespace on CPAN, for any submodule. For example, L could | 
| 2099 |  |  |  |  |  |  | be expected to use C (it should not access env | 
| 2100 |  |  |  |  |  |  | variables starting with C, see below). | 
| 2101 |  |  |  |  |  |  |  | 
| 2102 |  |  |  |  |  |  | All variables can also be set via the C prefix, that is, instead | 
| 2103 |  |  |  |  |  |  | of setting C you can also set C. In | 
| 2104 |  |  |  |  |  |  | case there is a clash btween anyevent and another program that uses | 
| 2105 |  |  |  |  |  |  | C you can set the corresponding C | 
| 2106 |  |  |  |  |  |  | variable to the empty string, as those variables take precedence. | 
| 2107 |  |  |  |  |  |  |  | 
| 2108 |  |  |  |  |  |  | When AnyEvent is first loaded, it copies all C env variables | 
| 2109 |  |  |  |  |  |  | to their C counterpart unless that variable already | 
| 2110 |  |  |  |  |  |  | exists. If taint mode is on, then AnyEvent will remove I environment | 
| 2111 |  |  |  |  |  |  | variables starting with C from C<%ENV> (or replace them | 
| 2112 |  |  |  |  |  |  | with C or the empty string, if the corresaponding C variable | 
| 2113 |  |  |  |  |  |  | is set). | 
| 2114 |  |  |  |  |  |  |  | 
| 2115 |  |  |  |  |  |  | The exact algorithm is currently: | 
| 2116 |  |  |  |  |  |  |  | 
| 2117 |  |  |  |  |  |  | 1. if taint mode enabled, delete all PERL_ANYEVENT_xyz variables from %ENV | 
| 2118 |  |  |  |  |  |  | 2. copy over AE_xyz to PERL_ANYEVENT_xyz unless the latter alraedy exists | 
| 2119 |  |  |  |  |  |  | 3. if taint mode enabled, set all PERL_ANYEVENT_xyz variables to undef. | 
| 2120 |  |  |  |  |  |  |  | 
| 2121 |  |  |  |  |  |  | This ensures that child processes will not see the C variables. | 
| 2122 |  |  |  |  |  |  |  | 
| 2123 |  |  |  |  |  |  | The following environment variables are currently known to AnyEvent: | 
| 2124 |  |  |  |  |  |  |  | 
| 2125 |  |  |  |  |  |  | =over 4 | 
| 2126 |  |  |  |  |  |  |  | 
| 2127 |  |  |  |  |  |  | =item C | 
| 2128 |  |  |  |  |  |  |  | 
| 2129 |  |  |  |  |  |  | By default, AnyEvent will log messages with loglevel C<4> (C) or | 
| 2130 |  |  |  |  |  |  | higher (see L). You can set this environment variable to a | 
| 2131 |  |  |  |  |  |  | numerical loglevel to make AnyEvent more (or less) talkative. | 
| 2132 |  |  |  |  |  |  |  | 
| 2133 |  |  |  |  |  |  | If you want to do more than just set the global logging level | 
| 2134 |  |  |  |  |  |  | you should have a look at C, which allows much more | 
| 2135 |  |  |  |  |  |  | complex specifications. | 
| 2136 |  |  |  |  |  |  |  | 
| 2137 |  |  |  |  |  |  | When set to C<0> (C), then no messages whatsoever will be logged with | 
| 2138 |  |  |  |  |  |  | everything else at defaults. | 
| 2139 |  |  |  |  |  |  |  | 
| 2140 |  |  |  |  |  |  | When set to C<5> or higher (C), AnyEvent warns about unexpected | 
| 2141 |  |  |  |  |  |  | conditions, such as not being able to load the event model specified by | 
| 2142 |  |  |  |  |  |  | C, or a guard callback throwing an exception - this | 
| 2143 |  |  |  |  |  |  | is the minimum recommended level for use during development. | 
| 2144 |  |  |  |  |  |  |  | 
| 2145 |  |  |  |  |  |  | When set to C<7> or higher (info), AnyEvent reports which event model it | 
| 2146 |  |  |  |  |  |  | chooses. | 
| 2147 |  |  |  |  |  |  |  | 
| 2148 |  |  |  |  |  |  | When set to C<8> or higher (debug), then AnyEvent will report extra | 
| 2149 |  |  |  |  |  |  | information on which optional modules it loads and how it implements | 
| 2150 |  |  |  |  |  |  | certain features. | 
| 2151 |  |  |  |  |  |  |  | 
| 2152 |  |  |  |  |  |  | =item C | 
| 2153 |  |  |  |  |  |  |  | 
| 2154 |  |  |  |  |  |  | Accepts rather complex logging specifications. For example, you could log | 
| 2155 |  |  |  |  |  |  | all C messages of some module to stderr, warnings and above to | 
| 2156 |  |  |  |  |  |  | stderr, and errors and above to syslog, with: | 
| 2157 |  |  |  |  |  |  |  | 
| 2158 |  |  |  |  |  |  | PERL_ANYEVENT_LOG=Some::Module=debug,+log:filter=warn,+%syslog:%syslog=error,syslog | 
| 2159 |  |  |  |  |  |  |  | 
| 2160 |  |  |  |  |  |  | For the rather extensive details, see L. | 
| 2161 |  |  |  |  |  |  |  | 
| 2162 |  |  |  |  |  |  | This variable is evaluated when AnyEvent (or L) is loaded, | 
| 2163 |  |  |  |  |  |  | so will take effect even before AnyEvent has initialised itself. | 
| 2164 |  |  |  |  |  |  |  | 
| 2165 |  |  |  |  |  |  | Note that specifying this environment variable causes the L | 
| 2166 |  |  |  |  |  |  | module to be loaded, while C does not, so only | 
| 2167 |  |  |  |  |  |  | using the latter saves a few hundred kB of memory unless a module | 
| 2168 |  |  |  |  |  |  | explicitly needs the extra features of AnyEvent::Log. | 
| 2169 |  |  |  |  |  |  |  | 
| 2170 |  |  |  |  |  |  | =item C | 
| 2171 |  |  |  |  |  |  |  | 
| 2172 |  |  |  |  |  |  | AnyEvent does not do much argument checking by default, as thorough | 
| 2173 |  |  |  |  |  |  | argument checking is very costly. Setting this variable to a true value | 
| 2174 |  |  |  |  |  |  | will cause AnyEvent to load C and then to thoroughly | 
| 2175 |  |  |  |  |  |  | check the arguments passed to most method calls. If it finds any problems, | 
| 2176 |  |  |  |  |  |  | it will croak. | 
| 2177 |  |  |  |  |  |  |  | 
| 2178 |  |  |  |  |  |  | In other words, enables "strict" mode. | 
| 2179 |  |  |  |  |  |  |  | 
| 2180 |  |  |  |  |  |  | Unlike C | 
| 2181 |  |  |  |  |  |  | >>, it is definitely recommended to keep it off in production. Keeping | 
| 2182 |  |  |  |  |  |  | C in your environment while developing programs | 
| 2183 |  |  |  |  |  |  | can be very useful, however. | 
| 2184 |  |  |  |  |  |  |  | 
| 2185 |  |  |  |  |  |  | =item C | 
| 2186 |  |  |  |  |  |  |  | 
| 2187 |  |  |  |  |  |  | If this env variable is nonempty, then its contents will be interpreted by | 
| 2188 |  |  |  |  |  |  | C and C (after | 
| 2189 |  |  |  |  |  |  | replacing every occurance of C<$$> by the process pid). The shell object | 
| 2190 |  |  |  |  |  |  | is saved in C<$AnyEvent::Debug::SHELL>. | 
| 2191 |  |  |  |  |  |  |  | 
| 2192 |  |  |  |  |  |  | This happens when the first watcher is created. | 
| 2193 |  |  |  |  |  |  |  | 
| 2194 |  |  |  |  |  |  | For example, to bind a debug shell on a unix domain socket in | 
| 2195 |  |  |  |  |  |  | F<< /tmp/debug.sock >>, you could use this: | 
| 2196 |  |  |  |  |  |  |  | 
| 2197 |  |  |  |  |  |  | PERL_ANYEVENT_DEBUG_SHELL=/tmp/debug\$\$.sock perlprog | 
| 2198 |  |  |  |  |  |  | # connect with e.g.: socat readline /tmp/debug123.sock | 
| 2199 |  |  |  |  |  |  |  | 
| 2200 |  |  |  |  |  |  | Or to bind to tcp port 4545 on localhost: | 
| 2201 |  |  |  |  |  |  |  | 
| 2202 |  |  |  |  |  |  | PERL_ANYEVENT_DEBUG_SHELL=127.0.0.1:4545 perlprog | 
| 2203 |  |  |  |  |  |  | # connect with e.g.: telnet localhost 4545 | 
| 2204 |  |  |  |  |  |  |  | 
| 2205 |  |  |  |  |  |  | Note that creating sockets in F or on localhost is very unsafe on | 
| 2206 |  |  |  |  |  |  | multiuser systems. | 
| 2207 |  |  |  |  |  |  |  | 
| 2208 |  |  |  |  |  |  | =item C | 
| 2209 |  |  |  |  |  |  |  | 
| 2210 |  |  |  |  |  |  | Can be set to C<0>, C<1> or C<2> and enables wrapping of all watchers for | 
| 2211 |  |  |  |  |  |  | debugging purposes. See C for details. | 
| 2212 |  |  |  |  |  |  |  | 
| 2213 |  |  |  |  |  |  | =item C | 
| 2214 |  |  |  |  |  |  |  | 
| 2215 |  |  |  |  |  |  | This can be used to specify the event model to be used by AnyEvent, before | 
| 2216 |  |  |  |  |  |  | auto detection and -probing kicks in. | 
| 2217 |  |  |  |  |  |  |  | 
| 2218 |  |  |  |  |  |  | It normally is a string consisting entirely of ASCII letters (e.g. C | 
| 2219 |  |  |  |  |  |  | or C). The string C gets prepended and the | 
| 2220 |  |  |  |  |  |  | resulting module name is loaded and - if the load was successful - used as | 
| 2221 |  |  |  |  |  |  | event model backend. If it fails to load then AnyEvent will proceed with | 
| 2222 |  |  |  |  |  |  | auto detection and -probing. | 
| 2223 |  |  |  |  |  |  |  | 
| 2224 |  |  |  |  |  |  | If the string ends with C<::> instead (e.g. C) then | 
| 2225 |  |  |  |  |  |  | nothing gets prepended and the module name is used as-is (hint: C<::> at | 
| 2226 |  |  |  |  |  |  | the end of a string designates a module name and quotes it appropriately). | 
| 2227 |  |  |  |  |  |  |  | 
| 2228 |  |  |  |  |  |  | For example, to force the pure perl model (L) you | 
| 2229 |  |  |  |  |  |  | could start your program like this: | 
| 2230 |  |  |  |  |  |  |  | 
| 2231 |  |  |  |  |  |  | PERL_ANYEVENT_MODEL=Perl perl ... | 
| 2232 |  |  |  |  |  |  |  | 
| 2233 |  |  |  |  |  |  | =item C | 
| 2234 |  |  |  |  |  |  |  | 
| 2235 |  |  |  |  |  |  | The current file I/O model - see L for more info. | 
| 2236 |  |  |  |  |  |  |  | 
| 2237 |  |  |  |  |  |  | At the moment, only C (small, pure-perl, synchronous) and | 
| 2238 |  |  |  |  |  |  | C (truly asynchronous) are supported. The default is C if | 
| 2239 |  |  |  |  |  |  | L can be loaded, otherwise it is C. | 
| 2240 |  |  |  |  |  |  |  | 
| 2241 |  |  |  |  |  |  | =item C | 
| 2242 |  |  |  |  |  |  |  | 
| 2243 |  |  |  |  |  |  | Used by both L and L to determine preferences | 
| 2244 |  |  |  |  |  |  | for IPv4 or IPv6. The default is unspecified (and might change, or be the result | 
| 2245 |  |  |  |  |  |  | of auto probing). | 
| 2246 |  |  |  |  |  |  |  | 
| 2247 |  |  |  |  |  |  | Must be set to a comma-separated list of protocols or address families, | 
| 2248 |  |  |  |  |  |  | current supported: C and C. Only protocols mentioned will be | 
| 2249 |  |  |  |  |  |  | used, and preference will be given to protocols mentioned earlier in the | 
| 2250 |  |  |  |  |  |  | list. | 
| 2251 |  |  |  |  |  |  |  | 
| 2252 |  |  |  |  |  |  | This variable can effectively be used for denial-of-service attacks | 
| 2253 |  |  |  |  |  |  | against local programs (e.g. when setuid), although the impact is likely | 
| 2254 |  |  |  |  |  |  | small, as the program has to handle connection and other failures anyways. | 
| 2255 |  |  |  |  |  |  |  | 
| 2256 |  |  |  |  |  |  | Examples: C - prefer IPv4 over IPv6, | 
| 2257 |  |  |  |  |  |  | but support both and try to use both.  C | 
| 2258 |  |  |  |  |  |  | - only support IPv4, never try to resolve or contact IPv6 | 
| 2259 |  |  |  |  |  |  | addresses. C support either IPv4 or | 
| 2260 |  |  |  |  |  |  | IPv6, but prefer IPv6 over IPv4. | 
| 2261 |  |  |  |  |  |  |  | 
| 2262 |  |  |  |  |  |  | =item C | 
| 2263 |  |  |  |  |  |  |  | 
| 2264 |  |  |  |  |  |  | This variable, if specified, overrides the F file used by | 
| 2265 |  |  |  |  |  |  | LC<::resolve_sockaddr>, i.e. hosts aliases will be read | 
| 2266 |  |  |  |  |  |  | from that file instead. | 
| 2267 |  |  |  |  |  |  |  | 
| 2268 |  |  |  |  |  |  | =item C | 
| 2269 |  |  |  |  |  |  |  | 
| 2270 |  |  |  |  |  |  | Used by L to decide whether to use the EDNS0 extension for | 
| 2271 |  |  |  |  |  |  | DNS. This extension is generally useful to reduce DNS traffic, especially | 
| 2272 |  |  |  |  |  |  | when DNSSEC is involved, but some (broken) firewalls drop such DNS | 
| 2273 |  |  |  |  |  |  | packets, which is why it is off by default. | 
| 2274 |  |  |  |  |  |  |  | 
| 2275 |  |  |  |  |  |  | Setting this variable to C<1> will cause L to announce | 
| 2276 |  |  |  |  |  |  | EDNS0 in its DNS requests. | 
| 2277 |  |  |  |  |  |  |  | 
| 2278 |  |  |  |  |  |  | =item C | 
| 2279 |  |  |  |  |  |  |  | 
| 2280 |  |  |  |  |  |  | The maximum number of child processes that C | 
| 2281 |  |  |  |  |  |  | will create in parallel. | 
| 2282 |  |  |  |  |  |  |  | 
| 2283 |  |  |  |  |  |  | =item C | 
| 2284 |  |  |  |  |  |  |  | 
| 2285 |  |  |  |  |  |  | The default value for the C parameter for the default DNS | 
| 2286 |  |  |  |  |  |  | resolver - this is the maximum number of parallel DNS requests that are | 
| 2287 |  |  |  |  |  |  | sent to the DNS server. | 
| 2288 |  |  |  |  |  |  |  | 
| 2289 |  |  |  |  |  |  | =item C | 
| 2290 |  |  |  |  |  |  |  | 
| 2291 |  |  |  |  |  |  | Perl has inherently racy signal handling (you can basically choose between | 
| 2292 |  |  |  |  |  |  | losing signals and memory corruption) - pure perl event loops (including | 
| 2293 |  |  |  |  |  |  | C, when C isn't available) therefore | 
| 2294 |  |  |  |  |  |  | have to poll regularly to avoid losing signals. | 
| 2295 |  |  |  |  |  |  |  | 
| 2296 |  |  |  |  |  |  | Some event loops are racy, but don't poll regularly, and some event loops | 
| 2297 |  |  |  |  |  |  | are written in C but are still racy. For those event loops, AnyEvent | 
| 2298 |  |  |  |  |  |  | installs a timer that regularly wakes up the event loop. | 
| 2299 |  |  |  |  |  |  |  | 
| 2300 |  |  |  |  |  |  | By default, the interval for this timer is C<10> seconds, but you can | 
| 2301 |  |  |  |  |  |  | override this delay with this environment variable (or by setting | 
| 2302 |  |  |  |  |  |  | the C<$AnyEvent::MAX_SIGNAL_LATENCY> variable before creating signal | 
| 2303 |  |  |  |  |  |  | watchers). | 
| 2304 |  |  |  |  |  |  |  | 
| 2305 |  |  |  |  |  |  | Lower values increase CPU (and energy) usage, higher values can introduce | 
| 2306 |  |  |  |  |  |  | long delays when reaping children or waiting for signals. | 
| 2307 |  |  |  |  |  |  |  | 
| 2308 |  |  |  |  |  |  | The L module, if available, will be used to avoid this | 
| 2309 |  |  |  |  |  |  | polling (with most event loops). | 
| 2310 |  |  |  |  |  |  |  | 
| 2311 |  |  |  |  |  |  | =item C | 
| 2312 |  |  |  |  |  |  |  | 
| 2313 |  |  |  |  |  |  | The absolute path to a F-style file to use instead of | 
| 2314 |  |  |  |  |  |  | F (or the OS-specific configuration) in the default | 
| 2315 |  |  |  |  |  |  | resolver, or the empty string to select the default configuration. | 
| 2316 |  |  |  |  |  |  |  | 
| 2317 |  |  |  |  |  |  | =item C, C. | 
| 2318 |  |  |  |  |  |  |  | 
| 2319 |  |  |  |  |  |  | When neither C nor C was specified during | 
| 2320 |  |  |  |  |  |  | L context creation, and either of these environment | 
| 2321 |  |  |  |  |  |  | variables are nonempty, they will be used to specify CA certificate | 
| 2322 |  |  |  |  |  |  | locations instead of a system-dependent default. | 
| 2323 |  |  |  |  |  |  |  | 
| 2324 |  |  |  |  |  |  | =item C and C | 
| 2325 |  |  |  |  |  |  |  | 
| 2326 |  |  |  |  |  |  | When these are set to C<1>, then the respective modules are not | 
| 2327 |  |  |  |  |  |  | loaded. Mostly good for testing AnyEvent itself. | 
| 2328 |  |  |  |  |  |  |  | 
| 2329 |  |  |  |  |  |  | =back | 
| 2330 |  |  |  |  |  |  |  | 
| 2331 |  |  |  |  |  |  | =head1 SUPPLYING YOUR OWN EVENT MODEL INTERFACE | 
| 2332 |  |  |  |  |  |  |  | 
| 2333 |  |  |  |  |  |  | This is an advanced topic that you do not normally need to use AnyEvent in | 
| 2334 |  |  |  |  |  |  | a module. This section is only of use to event loop authors who want to | 
| 2335 |  |  |  |  |  |  | provide AnyEvent compatibility. | 
| 2336 |  |  |  |  |  |  |  | 
| 2337 |  |  |  |  |  |  | If you need to support another event library which isn't directly | 
| 2338 |  |  |  |  |  |  | supported by AnyEvent, you can supply your own interface to it by | 
| 2339 |  |  |  |  |  |  | pushing, before the first watcher gets created, the package name of | 
| 2340 |  |  |  |  |  |  | the event module and the package name of the interface to use onto | 
| 2341 |  |  |  |  |  |  | C<@AnyEvent::REGISTRY>. You can do that before and even without loading | 
| 2342 |  |  |  |  |  |  | AnyEvent, so it is reasonably cheap. | 
| 2343 |  |  |  |  |  |  |  | 
| 2344 |  |  |  |  |  |  | Example: | 
| 2345 |  |  |  |  |  |  |  | 
| 2346 |  |  |  |  |  |  | push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::]; | 
| 2347 |  |  |  |  |  |  |  | 
| 2348 |  |  |  |  |  |  | This tells AnyEvent to (literally) use the C | 
| 2349 |  |  |  |  |  |  | package/class when it finds the C package/module is already loaded. | 
| 2350 |  |  |  |  |  |  |  | 
| 2351 |  |  |  |  |  |  | When AnyEvent is loaded and asked to find a suitable event model, it | 
| 2352 |  |  |  |  |  |  | will first check for the presence of urxvt by trying to C | 
| 2353 |  |  |  |  |  |  | C module. | 
| 2354 |  |  |  |  |  |  |  | 
| 2355 |  |  |  |  |  |  | The class should provide implementations for all watcher types. See | 
| 2356 |  |  |  |  |  |  | L (source code), L (Source code) | 
| 2357 |  |  |  |  |  |  | and so on for actual examples. Use C to | 
| 2358 |  |  |  |  |  |  | see the sources. | 
| 2359 |  |  |  |  |  |  |  | 
| 2360 |  |  |  |  |  |  | If you don't provide C and C watchers than AnyEvent will | 
| 2361 |  |  |  |  |  |  | provide suitable (hopefully) replacements. | 
| 2362 |  |  |  |  |  |  |  | 
| 2363 |  |  |  |  |  |  | The above example isn't fictitious, the I (a.k.a. urxvt) | 
| 2364 |  |  |  |  |  |  | terminal emulator uses the above line as-is. An interface isn't included | 
| 2365 |  |  |  |  |  |  | in AnyEvent because it doesn't make sense outside the embedded interpreter | 
| 2366 |  |  |  |  |  |  | inside I, and it is updated and maintained as part of the | 
| 2367 |  |  |  |  |  |  | I distribution. | 
| 2368 |  |  |  |  |  |  |  | 
| 2369 |  |  |  |  |  |  | I also cheats a bit by not providing blocking access to | 
| 2370 |  |  |  |  |  |  | condition variables: code blocking while waiting for a condition will | 
| 2371 |  |  |  |  |  |  | C. This still works with most modules/usages, and blocking calls must | 
| 2372 |  |  |  |  |  |  | not be done in an interactive application, so it makes sense. | 
| 2373 |  |  |  |  |  |  |  | 
| 2374 |  |  |  |  |  |  | =head1 EXAMPLE PROGRAM | 
| 2375 |  |  |  |  |  |  |  | 
| 2376 |  |  |  |  |  |  | The following program uses an I/O watcher to read data from STDIN, a timer | 
| 2377 |  |  |  |  |  |  | to display a message once per second, and a condition variable to quit the | 
| 2378 |  |  |  |  |  |  | program when the user enters quit: | 
| 2379 |  |  |  |  |  |  |  | 
| 2380 |  |  |  |  |  |  | use AnyEvent; | 
| 2381 |  |  |  |  |  |  |  | 
| 2382 |  |  |  |  |  |  | my $cv = AnyEvent->condvar; | 
| 2383 |  |  |  |  |  |  |  | 
| 2384 |  |  |  |  |  |  | my $io_watcher = AnyEvent->io ( | 
| 2385 |  |  |  |  |  |  | fh   => \*STDIN, | 
| 2386 |  |  |  |  |  |  | poll => 'r', | 
| 2387 |  |  |  |  |  |  | cb   => sub { | 
| 2388 |  |  |  |  |  |  | warn "io event <$_[0]>\n";   # will always output | 
| 2389 |  |  |  |  |  |  | chomp (my $input = ); # read a line | 
| 2390 |  |  |  |  |  |  | warn "read: $input\n";       # output what has been read | 
| 2391 |  |  |  |  |  |  | $cv->send if $input =~ /^q/i; # quit program if /^q/i | 
| 2392 |  |  |  |  |  |  | }, | 
| 2393 |  |  |  |  |  |  | ); | 
| 2394 |  |  |  |  |  |  |  | 
| 2395 |  |  |  |  |  |  | my $time_watcher = AnyEvent->timer (after => 1, interval => 1, cb => sub { | 
| 2396 |  |  |  |  |  |  | warn "timeout\n"; # print 'timeout' at most every second | 
| 2397 |  |  |  |  |  |  | }); | 
| 2398 |  |  |  |  |  |  |  | 
| 2399 |  |  |  |  |  |  | $cv->recv; # wait until user enters /^q/i | 
| 2400 |  |  |  |  |  |  |  | 
| 2401 |  |  |  |  |  |  | =head1 REAL-WORLD EXAMPLE | 
| 2402 |  |  |  |  |  |  |  | 
| 2403 |  |  |  |  |  |  | Consider the L module. It features (among others) the following | 
| 2404 |  |  |  |  |  |  | API calls, which are to freenet what HTTP GET requests are to http: | 
| 2405 |  |  |  |  |  |  |  | 
| 2406 |  |  |  |  |  |  | my $data = $fcp->client_get ($url); # blocks | 
| 2407 |  |  |  |  |  |  |  | 
| 2408 |  |  |  |  |  |  | my $transaction = $fcp->txn_client_get ($url); # does not block | 
| 2409 |  |  |  |  |  |  | $transaction->cb ( sub { ... } ); # set optional result callback | 
| 2410 |  |  |  |  |  |  | my $data = $transaction->result; # possibly blocks | 
| 2411 |  |  |  |  |  |  |  | 
| 2412 |  |  |  |  |  |  | The C method works like C: it requests the | 
| 2413 |  |  |  |  |  |  | given URL and waits till the data has arrived. It is defined to be: | 
| 2414 |  |  |  |  |  |  |  | 
| 2415 |  |  |  |  |  |  | sub client_get { $_[0]->txn_client_get ($_[1])->result } | 
| 2416 |  |  |  |  |  |  |  | 
| 2417 |  |  |  |  |  |  | And in fact is automatically generated. This is the blocking API of | 
| 2418 |  |  |  |  |  |  | L, and it works as simple as in any other, similar, module. | 
| 2419 |  |  |  |  |  |  |  | 
| 2420 |  |  |  |  |  |  | More complicated is C: It only creates a transaction | 
| 2421 |  |  |  |  |  |  | (completion, result, ...) object and initiates the transaction. | 
| 2422 |  |  |  |  |  |  |  | 
| 2423 |  |  |  |  |  |  | my $txn = bless { }, Net::FCP::Txn::; | 
| 2424 |  |  |  |  |  |  |  | 
| 2425 |  |  |  |  |  |  | It also creates a condition variable that is used to signal the completion | 
| 2426 |  |  |  |  |  |  | of the request: | 
| 2427 |  |  |  |  |  |  |  | 
| 2428 |  |  |  |  |  |  | $txn->{finished} = AnyAvent->condvar; | 
| 2429 |  |  |  |  |  |  |  | 
| 2430 |  |  |  |  |  |  | It then creates a socket in non-blocking mode. | 
| 2431 |  |  |  |  |  |  |  | 
| 2432 |  |  |  |  |  |  | socket $txn->{fh}, ...; | 
| 2433 |  |  |  |  |  |  | fcntl $txn->{fh}, F_SETFL, O_NONBLOCK; | 
| 2434 |  |  |  |  |  |  | connect $txn->{fh}, ... | 
| 2435 |  |  |  |  |  |  | and !$!{EWOULDBLOCK} | 
| 2436 |  |  |  |  |  |  | and !$!{EINPROGRESS} | 
| 2437 |  |  |  |  |  |  | and Carp::croak "unable to connect: $!\n"; | 
| 2438 |  |  |  |  |  |  |  | 
| 2439 |  |  |  |  |  |  | Then it creates a write-watcher which gets called whenever an error occurs | 
| 2440 |  |  |  |  |  |  | or the connection succeeds: | 
| 2441 |  |  |  |  |  |  |  | 
| 2442 |  |  |  |  |  |  | $txn->{w} = AnyEvent->io (fh => $txn->{fh}, poll => 'w', cb => sub { $txn->fh_ready_w }); | 
| 2443 |  |  |  |  |  |  |  | 
| 2444 |  |  |  |  |  |  | And returns this transaction object. The C callback gets | 
| 2445 |  |  |  |  |  |  | called as soon as the event loop detects that the socket is ready for | 
| 2446 |  |  |  |  |  |  | writing. | 
| 2447 |  |  |  |  |  |  |  | 
| 2448 |  |  |  |  |  |  | The C method makes the socket blocking again, writes the | 
| 2449 |  |  |  |  |  |  | request data and replaces the watcher by a read watcher (waiting for reply | 
| 2450 |  |  |  |  |  |  | data). The actual code is more complicated, but that doesn't matter for | 
| 2451 |  |  |  |  |  |  | this example: | 
| 2452 |  |  |  |  |  |  |  | 
| 2453 |  |  |  |  |  |  | fcntl $txn->{fh}, F_SETFL, 0; | 
| 2454 |  |  |  |  |  |  | syswrite $txn->{fh}, $txn->{request} | 
| 2455 |  |  |  |  |  |  | or die "connection or write error"; | 
| 2456 |  |  |  |  |  |  | $txn->{w} = AnyEvent->io (fh => $txn->{fh}, poll => 'r', cb => sub { $txn->fh_ready_r }); | 
| 2457 |  |  |  |  |  |  |  | 
| 2458 |  |  |  |  |  |  | Again, C waits till all data has arrived, and then stores the | 
| 2459 |  |  |  |  |  |  | result and signals any possible waiters that the request has finished: | 
| 2460 |  |  |  |  |  |  |  | 
| 2461 |  |  |  |  |  |  | sysread $txn->{fh}, $txn->{buf}, length $txn->{$buf}; | 
| 2462 |  |  |  |  |  |  |  | 
| 2463 |  |  |  |  |  |  | if (end-of-file or data complete) { | 
| 2464 |  |  |  |  |  |  | $txn->{result} = $txn->{buf}; | 
| 2465 |  |  |  |  |  |  | $txn->{finished}->send; | 
| 2466 |  |  |  |  |  |  | $txb->{cb}->($txn) of $txn->{cb}; # also call callback | 
| 2467 |  |  |  |  |  |  | } | 
| 2468 |  |  |  |  |  |  |  | 
| 2469 |  |  |  |  |  |  | The C method, finally, just waits for the finished signal (if the | 
| 2470 |  |  |  |  |  |  | request was already finished, it doesn't wait, of course, and returns the | 
| 2471 |  |  |  |  |  |  | data: | 
| 2472 |  |  |  |  |  |  |  | 
| 2473 |  |  |  |  |  |  | $txn->{finished}->recv; | 
| 2474 |  |  |  |  |  |  | return $txn->{result}; | 
| 2475 |  |  |  |  |  |  |  | 
| 2476 |  |  |  |  |  |  | The actual code goes further and collects all errors (Cs, exceptions) | 
| 2477 |  |  |  |  |  |  | that occurred during request processing. The C method detects | 
| 2478 |  |  |  |  |  |  | whether an exception as thrown (it is stored inside the $txn object) | 
| 2479 |  |  |  |  |  |  | and just throws the exception, which means connection errors and other | 
| 2480 |  |  |  |  |  |  | problems get reported to the code that tries to use the result, not in a | 
| 2481 |  |  |  |  |  |  | random callback. | 
| 2482 |  |  |  |  |  |  |  | 
| 2483 |  |  |  |  |  |  | All of this enables the following usage styles: | 
| 2484 |  |  |  |  |  |  |  | 
| 2485 |  |  |  |  |  |  | 1. Blocking: | 
| 2486 |  |  |  |  |  |  |  | 
| 2487 |  |  |  |  |  |  | my $data = $fcp->client_get ($url); | 
| 2488 |  |  |  |  |  |  |  | 
| 2489 |  |  |  |  |  |  | 2. Blocking, but running in parallel: | 
| 2490 |  |  |  |  |  |  |  | 
| 2491 |  |  |  |  |  |  | my @datas = map $_->result, | 
| 2492 |  |  |  |  |  |  | map $fcp->txn_client_get ($_), | 
| 2493 |  |  |  |  |  |  | @urls; | 
| 2494 |  |  |  |  |  |  |  | 
| 2495 |  |  |  |  |  |  | Both blocking examples work without the module user having to know | 
| 2496 |  |  |  |  |  |  | anything about events. | 
| 2497 |  |  |  |  |  |  |  | 
| 2498 |  |  |  |  |  |  | 3a. Event-based in a main program, using any supported event module: | 
| 2499 |  |  |  |  |  |  |  | 
| 2500 |  |  |  |  |  |  | use EV; | 
| 2501 |  |  |  |  |  |  |  | 
| 2502 |  |  |  |  |  |  | $fcp->txn_client_get ($url)->cb (sub { | 
| 2503 |  |  |  |  |  |  | my $txn = shift; | 
| 2504 |  |  |  |  |  |  | my $data = $txn->result; | 
| 2505 |  |  |  |  |  |  | ... | 
| 2506 |  |  |  |  |  |  | }); | 
| 2507 |  |  |  |  |  |  |  | 
| 2508 |  |  |  |  |  |  | EV::run; | 
| 2509 |  |  |  |  |  |  |  | 
| 2510 |  |  |  |  |  |  | 3b. The module user could use AnyEvent, too: | 
| 2511 |  |  |  |  |  |  |  | 
| 2512 |  |  |  |  |  |  | use AnyEvent; | 
| 2513 |  |  |  |  |  |  |  | 
| 2514 |  |  |  |  |  |  | my $quit = AnyEvent->condvar; | 
| 2515 |  |  |  |  |  |  |  | 
| 2516 |  |  |  |  |  |  | $fcp->txn_client_get ($url)->cb (sub { | 
| 2517 |  |  |  |  |  |  | ... | 
| 2518 |  |  |  |  |  |  | $quit->send; | 
| 2519 |  |  |  |  |  |  | }); | 
| 2520 |  |  |  |  |  |  |  | 
| 2521 |  |  |  |  |  |  | $quit->recv; | 
| 2522 |  |  |  |  |  |  |  | 
| 2523 |  |  |  |  |  |  |  | 
| 2524 |  |  |  |  |  |  | =head1 BENCHMARKS | 
| 2525 |  |  |  |  |  |  |  | 
| 2526 |  |  |  |  |  |  | To give you an idea of the performance and overheads that AnyEvent adds | 
| 2527 |  |  |  |  |  |  | over the event loops themselves and to give you an impression of the speed | 
| 2528 |  |  |  |  |  |  | of various event loops I prepared some benchmarks. | 
| 2529 |  |  |  |  |  |  |  | 
| 2530 |  |  |  |  |  |  | =head2 BENCHMARKING ANYEVENT OVERHEAD | 
| 2531 |  |  |  |  |  |  |  | 
| 2532 |  |  |  |  |  |  | Here is a benchmark of various supported event models used natively and | 
| 2533 |  |  |  |  |  |  | through AnyEvent. The benchmark creates a lot of timers (with a zero | 
| 2534 |  |  |  |  |  |  | timeout) and I/O watchers (watching STDOUT, a pty, to become writable, | 
| 2535 |  |  |  |  |  |  | which it is), lets them fire exactly once and destroys them again. | 
| 2536 |  |  |  |  |  |  |  | 
| 2537 |  |  |  |  |  |  | Source code for this benchmark is found as F in the AnyEvent | 
| 2538 |  |  |  |  |  |  | distribution. It uses the L interface, which makes a real difference | 
| 2539 |  |  |  |  |  |  | for the EV and Perl backends only. | 
| 2540 |  |  |  |  |  |  |  | 
| 2541 |  |  |  |  |  |  | =head3 Explanation of the columns | 
| 2542 |  |  |  |  |  |  |  | 
| 2543 |  |  |  |  |  |  | I is the number of event watchers created/destroyed. Since | 
| 2544 |  |  |  |  |  |  | different event models feature vastly different performances, each event | 
| 2545 |  |  |  |  |  |  | loop was given a number of watchers so that overall runtime is acceptable | 
| 2546 |  |  |  |  |  |  | and similar between tested event loop (and keep them from crashing): Glib | 
| 2547 |  |  |  |  |  |  | would probably take thousands of years if asked to process the same number | 
| 2548 |  |  |  |  |  |  | of watchers as EV in this benchmark. | 
| 2549 |  |  |  |  |  |  |  | 
| 2550 |  |  |  |  |  |  | I is the number of bytes (as measured by the resident set size, | 
| 2551 |  |  |  |  |  |  | RSS) consumed by each watcher. This method of measuring captures both C | 
| 2552 |  |  |  |  |  |  | and Perl-based overheads. | 
| 2553 |  |  |  |  |  |  |  | 
| 2554 |  |  |  |  |  |  | I is the time, in microseconds (millionths of seconds), that it | 
| 2555 |  |  |  |  |  |  | takes to create a single watcher. The callback is a closure shared between | 
| 2556 |  |  |  |  |  |  | all watchers, to avoid adding memory overhead. That means closure creation | 
| 2557 |  |  |  |  |  |  | and memory usage is not included in the figures. | 
| 2558 |  |  |  |  |  |  |  | 
| 2559 |  |  |  |  |  |  | I is the time, in microseconds, used to invoke a simple | 
| 2560 |  |  |  |  |  |  | callback. The callback simply counts down a Perl variable and after it was | 
| 2561 |  |  |  |  |  |  | invoked "watcher" times, it would C<< ->send >> a condvar once to | 
| 2562 |  |  |  |  |  |  | signal the end of this phase. | 
| 2563 |  |  |  |  |  |  |  | 
| 2564 |  |  |  |  |  |  | I is the time, in microseconds, that it takes to destroy a single | 
| 2565 |  |  |  |  |  |  | watcher. | 
| 2566 |  |  |  |  |  |  |  | 
| 2567 |  |  |  |  |  |  | =head3 Results | 
| 2568 |  |  |  |  |  |  |  | 
| 2569 |  |  |  |  |  |  | name watchers bytes create invoke destroy comment | 
| 2570 |  |  |  |  |  |  | EV/EV   100000   223   0.47   0.43    0.27 EV native interface | 
| 2571 |  |  |  |  |  |  | EV/Any   100000   223   0.48   0.42    0.26 EV + AnyEvent watchers | 
| 2572 |  |  |  |  |  |  | Coro::EV/Any   100000   223   0.47   0.42    0.26 coroutines + Coro::Signal | 
| 2573 |  |  |  |  |  |  | Perl/Any   100000   431   2.70   0.74    0.92 pure perl implementation | 
| 2574 |  |  |  |  |  |  | Event/Event    16000   516  31.16  31.84    0.82 Event native interface | 
| 2575 |  |  |  |  |  |  | Event/Any    16000  1203  42.61  34.79    1.80 Event + AnyEvent watchers | 
| 2576 |  |  |  |  |  |  | IOAsync/Any    16000  1911  41.92  27.45   16.81 via IO::Async::Loop::IO_Poll | 
| 2577 |  |  |  |  |  |  | IOAsync/Any    16000  1726  40.69  26.37   15.25 via IO::Async::Loop::Epoll | 
| 2578 |  |  |  |  |  |  | Glib/Any    16000  1118  89.00  12.57   51.17 quadratic behaviour | 
| 2579 |  |  |  |  |  |  | Tk/Any     2000  1346  20.96  10.75    8.00 SEGV with >> 2000 watchers | 
| 2580 |  |  |  |  |  |  | POE/Any     2000  6951 108.97 795.32   14.24 via POE::Loop::Event | 
| 2581 |  |  |  |  |  |  | POE/Any     2000  6648  94.79 774.40  575.51 via POE::Loop::Select | 
| 2582 |  |  |  |  |  |  |  | 
| 2583 |  |  |  |  |  |  | =head3 Discussion | 
| 2584 |  |  |  |  |  |  |  | 
| 2585 |  |  |  |  |  |  | The benchmark does I measure scalability of the event loop very | 
| 2586 |  |  |  |  |  |  | well. For example, a select-based event loop (such as the pure perl one) | 
| 2587 |  |  |  |  |  |  | can never compete with an event loop that uses epoll when the number of | 
| 2588 |  |  |  |  |  |  | file descriptors grows high. In this benchmark, all events become ready at | 
| 2589 |  |  |  |  |  |  | the same time, so select/poll-based implementations get an unnatural speed | 
| 2590 |  |  |  |  |  |  | boost. | 
| 2591 |  |  |  |  |  |  |  | 
| 2592 |  |  |  |  |  |  | Also, note that the number of watchers usually has a nonlinear effect on | 
| 2593 |  |  |  |  |  |  | overall speed, that is, creating twice as many watchers doesn't take twice | 
| 2594 |  |  |  |  |  |  | the time - usually it takes longer. This puts event loops tested with a | 
| 2595 |  |  |  |  |  |  | higher number of watchers at a disadvantage. | 
| 2596 |  |  |  |  |  |  |  | 
| 2597 |  |  |  |  |  |  | To put the range of results into perspective, consider that on the | 
| 2598 |  |  |  |  |  |  | benchmark machine, handling an event takes roughly 1600 CPU cycles with | 
| 2599 |  |  |  |  |  |  | EV, 3100 CPU cycles with AnyEvent's pure perl loop and almost 3000000 CPU | 
| 2600 |  |  |  |  |  |  | cycles with POE. | 
| 2601 |  |  |  |  |  |  |  | 
| 2602 |  |  |  |  |  |  | C is the sole leader regarding speed and memory use, which are both | 
| 2603 |  |  |  |  |  |  | maximal/minimal, respectively. When using the L API there is zero | 
| 2604 |  |  |  |  |  |  | overhead (when going through the AnyEvent API create is about 5-6 times | 
| 2605 |  |  |  |  |  |  | slower, with other times being equal, so still uses far less memory than | 
| 2606 |  |  |  |  |  |  | any other event loop and is still faster than Event natively). | 
| 2607 |  |  |  |  |  |  |  | 
| 2608 |  |  |  |  |  |  | The pure perl implementation is hit in a few sweet spots (both the | 
| 2609 |  |  |  |  |  |  | constant timeout and the use of a single fd hit optimisations in the perl | 
| 2610 |  |  |  |  |  |  | interpreter and the backend itself). Nevertheless this shows that it | 
| 2611 |  |  |  |  |  |  | adds very little overhead in itself. Like any select-based backend its | 
| 2612 |  |  |  |  |  |  | performance becomes really bad with lots of file descriptors (and few of | 
| 2613 |  |  |  |  |  |  | them active), of course, but this was not subject of this benchmark. | 
| 2614 |  |  |  |  |  |  |  | 
| 2615 |  |  |  |  |  |  | The C module has a relatively high setup and callback invocation | 
| 2616 |  |  |  |  |  |  | cost, but overall scores in on the third place. | 
| 2617 |  |  |  |  |  |  |  | 
| 2618 |  |  |  |  |  |  | C performs admirably well, about on par with C, even | 
| 2619 |  |  |  |  |  |  | when using its pure perl backend. | 
| 2620 |  |  |  |  |  |  |  | 
| 2621 |  |  |  |  |  |  | C's memory usage is quite a bit higher, but it features a | 
| 2622 |  |  |  |  |  |  | faster callback invocation and overall ends up in the same class as | 
| 2623 |  |  |  |  |  |  | C. However, Glib scales extremely badly, doubling the number of | 
| 2624 |  |  |  |  |  |  | watchers increases the processing time by more than a factor of four, | 
| 2625 |  |  |  |  |  |  | making it completely unusable when using larger numbers of watchers | 
| 2626 |  |  |  |  |  |  | (note that only a single file descriptor was used in the benchmark, so | 
| 2627 |  |  |  |  |  |  | inefficiencies of C do not account for this). | 
| 2628 |  |  |  |  |  |  |  | 
| 2629 |  |  |  |  |  |  | The C adaptor works relatively well. The fact that it crashes with | 
| 2630 |  |  |  |  |  |  | more than 2000 watchers is a big setback, however, as correctness takes | 
| 2631 |  |  |  |  |  |  | precedence over speed. Nevertheless, its performance is surprising, as the | 
| 2632 |  |  |  |  |  |  | file descriptor is dup()ed for each watcher. This shows that the dup() | 
| 2633 |  |  |  |  |  |  | employed by some adaptors is not a big performance issue (it does incur a | 
| 2634 |  |  |  |  |  |  | hidden memory cost inside the kernel which is not reflected in the figures | 
| 2635 |  |  |  |  |  |  | above). | 
| 2636 |  |  |  |  |  |  |  | 
| 2637 |  |  |  |  |  |  | C, regardless of underlying event loop (whether using its pure perl | 
| 2638 |  |  |  |  |  |  | select-based backend or the Event module, the POE-EV backend couldn't | 
| 2639 |  |  |  |  |  |  | be tested because it wasn't working) shows abysmal performance and | 
| 2640 |  |  |  |  |  |  | memory usage with AnyEvent: Watchers use almost 30 times as much memory | 
| 2641 |  |  |  |  |  |  | as EV watchers, and 10 times as much memory as Event (the high memory | 
| 2642 |  |  |  |  |  |  | requirements are caused by requiring a session for each watcher). Watcher | 
| 2643 |  |  |  |  |  |  | invocation speed is almost 900 times slower than with AnyEvent's pure perl | 
| 2644 |  |  |  |  |  |  | implementation. | 
| 2645 |  |  |  |  |  |  |  | 
| 2646 |  |  |  |  |  |  | The design of the POE adaptor class in AnyEvent can not really account | 
| 2647 |  |  |  |  |  |  | for the performance issues, though, as session creation overhead is | 
| 2648 |  |  |  |  |  |  | small compared to execution of the state machine, which is coded pretty | 
| 2649 |  |  |  |  |  |  | optimally within L (and while everybody agrees that | 
| 2650 |  |  |  |  |  |  | using multiple sessions is not a good approach, especially regarding | 
| 2651 |  |  |  |  |  |  | memory usage, even the author of POE could not come up with a faster | 
| 2652 |  |  |  |  |  |  | design). | 
| 2653 |  |  |  |  |  |  |  | 
| 2654 |  |  |  |  |  |  | =head3 Summary | 
| 2655 |  |  |  |  |  |  |  | 
| 2656 |  |  |  |  |  |  | =over 4 | 
| 2657 |  |  |  |  |  |  |  | 
| 2658 |  |  |  |  |  |  | =item * Using EV through AnyEvent is faster than any other event loop | 
| 2659 |  |  |  |  |  |  | (even when used without AnyEvent), but most event loops have acceptable | 
| 2660 |  |  |  |  |  |  | performance with or without AnyEvent. | 
| 2661 |  |  |  |  |  |  |  | 
| 2662 |  |  |  |  |  |  | =item * The overhead AnyEvent adds is usually much smaller than the overhead of | 
| 2663 |  |  |  |  |  |  | the actual event loop, only with extremely fast event loops such as EV | 
| 2664 |  |  |  |  |  |  | does AnyEvent add significant overhead. | 
| 2665 |  |  |  |  |  |  |  | 
| 2666 |  |  |  |  |  |  | =item * You should avoid POE like the plague if you want performance or | 
| 2667 |  |  |  |  |  |  | reasonable memory usage. | 
| 2668 |  |  |  |  |  |  |  | 
| 2669 |  |  |  |  |  |  | =back | 
| 2670 |  |  |  |  |  |  |  | 
| 2671 |  |  |  |  |  |  | =head2 BENCHMARKING THE LARGE SERVER CASE | 
| 2672 |  |  |  |  |  |  |  | 
| 2673 |  |  |  |  |  |  | This benchmark actually benchmarks the event loop itself. It works by | 
| 2674 |  |  |  |  |  |  | creating a number of "servers": each server consists of a socket pair, a | 
| 2675 |  |  |  |  |  |  | timeout watcher that gets reset on activity (but never fires), and an I/O | 
| 2676 |  |  |  |  |  |  | watcher waiting for input on one side of the socket. Each time the socket | 
| 2677 |  |  |  |  |  |  | watcher reads a byte it will write that byte to a random other "server". | 
| 2678 |  |  |  |  |  |  |  | 
| 2679 |  |  |  |  |  |  | The effect is that there will be a lot of I/O watchers, only part of which | 
| 2680 |  |  |  |  |  |  | are active at any one point (so there is a constant number of active | 
| 2681 |  |  |  |  |  |  | fds for each loop iteration, but which fds these are is random). The | 
| 2682 |  |  |  |  |  |  | timeout is reset each time something is read because that reflects how | 
| 2683 |  |  |  |  |  |  | most timeouts work (and puts extra pressure on the event loops). | 
| 2684 |  |  |  |  |  |  |  | 
| 2685 |  |  |  |  |  |  | In this benchmark, we use 10000 socket pairs (20000 sockets), of which 100 | 
| 2686 |  |  |  |  |  |  | (1%) are active. This mirrors the activity of large servers with many | 
| 2687 |  |  |  |  |  |  | connections, most of which are idle at any one point in time. | 
| 2688 |  |  |  |  |  |  |  | 
| 2689 |  |  |  |  |  |  | Source code for this benchmark is found as F in the AnyEvent | 
| 2690 |  |  |  |  |  |  | distribution. It uses the L interface, which makes a real difference | 
| 2691 |  |  |  |  |  |  | for the EV and Perl backends only. | 
| 2692 |  |  |  |  |  |  |  | 
| 2693 |  |  |  |  |  |  | =head3 Explanation of the columns | 
| 2694 |  |  |  |  |  |  |  | 
| 2695 |  |  |  |  |  |  | I is the number of sockets, and twice the number of "servers" (as | 
| 2696 |  |  |  |  |  |  | each server has a read and write socket end). | 
| 2697 |  |  |  |  |  |  |  | 
| 2698 |  |  |  |  |  |  | I is the time it takes to create a socket pair (which is | 
| 2699 |  |  |  |  |  |  | nontrivial) and two watchers: an I/O watcher and a timeout watcher. | 
| 2700 |  |  |  |  |  |  |  | 
| 2701 |  |  |  |  |  |  | I, the most important value, is the time it takes to handle a | 
| 2702 |  |  |  |  |  |  | single "request", that is, reading the token from the pipe and forwarding | 
| 2703 |  |  |  |  |  |  | it to another server. This includes deleting the old timeout and creating | 
| 2704 |  |  |  |  |  |  | a new one that moves the timeout into the future. | 
| 2705 |  |  |  |  |  |  |  | 
| 2706 |  |  |  |  |  |  | =head3 Results | 
| 2707 |  |  |  |  |  |  |  | 
| 2708 |  |  |  |  |  |  | name sockets create  request | 
| 2709 |  |  |  |  |  |  | EV   20000  62.66     7.99 | 
| 2710 |  |  |  |  |  |  | Perl   20000  68.32    32.64 | 
| 2711 |  |  |  |  |  |  | IOAsync   20000 174.06   101.15 epoll | 
| 2712 |  |  |  |  |  |  | IOAsync   20000 174.67   610.84 poll | 
| 2713 |  |  |  |  |  |  | Event   20000 202.69   242.91 | 
| 2714 |  |  |  |  |  |  | Glib   20000 557.01  1689.52 | 
| 2715 |  |  |  |  |  |  | POE   20000 341.54 12086.32 uses POE::Loop::Event | 
| 2716 |  |  |  |  |  |  |  | 
| 2717 |  |  |  |  |  |  | =head3 Discussion | 
| 2718 |  |  |  |  |  |  |  | 
| 2719 |  |  |  |  |  |  | This benchmark I measure scalability and overall performance of the | 
| 2720 |  |  |  |  |  |  | particular event loop. | 
| 2721 |  |  |  |  |  |  |  | 
| 2722 |  |  |  |  |  |  | EV is again fastest. Since it is using epoll on my system, the setup time | 
| 2723 |  |  |  |  |  |  | is relatively high, though. | 
| 2724 |  |  |  |  |  |  |  | 
| 2725 |  |  |  |  |  |  | Perl surprisingly comes second. It is much faster than the C-based event | 
| 2726 |  |  |  |  |  |  | loops Event and Glib. | 
| 2727 |  |  |  |  |  |  |  | 
| 2728 |  |  |  |  |  |  | IO::Async performs very well when using its epoll backend, and still quite | 
| 2729 |  |  |  |  |  |  | good compared to Glib when using its pure perl backend. | 
| 2730 |  |  |  |  |  |  |  | 
| 2731 |  |  |  |  |  |  | Event suffers from high setup time as well (look at its code and you will | 
| 2732 |  |  |  |  |  |  | understand why). Callback invocation also has a high overhead compared to | 
| 2733 |  |  |  |  |  |  | the C<< $_->() for .. >>-style loop that the Perl event loop uses. Event | 
| 2734 |  |  |  |  |  |  | uses select or poll in basically all documented configurations. | 
| 2735 |  |  |  |  |  |  |  | 
| 2736 |  |  |  |  |  |  | Glib is hit hard by its quadratic behaviour w.r.t. many watchers. It | 
| 2737 |  |  |  |  |  |  | clearly fails to perform with many filehandles or in busy servers. | 
| 2738 |  |  |  |  |  |  |  | 
| 2739 |  |  |  |  |  |  | POE is still completely out of the picture, taking over 1000 times as long | 
| 2740 |  |  |  |  |  |  | as EV, and over 100 times as long as the Perl implementation, even though | 
| 2741 |  |  |  |  |  |  | it uses a C-based event loop in this case. | 
| 2742 |  |  |  |  |  |  |  | 
| 2743 |  |  |  |  |  |  | =head3 Summary | 
| 2744 |  |  |  |  |  |  |  | 
| 2745 |  |  |  |  |  |  | =over 4 | 
| 2746 |  |  |  |  |  |  |  | 
| 2747 |  |  |  |  |  |  | =item * The pure perl implementation performs extremely well. | 
| 2748 |  |  |  |  |  |  |  | 
| 2749 |  |  |  |  |  |  | =item * Avoid Glib or POE in large projects where performance matters. | 
| 2750 |  |  |  |  |  |  |  | 
| 2751 |  |  |  |  |  |  | =back | 
| 2752 |  |  |  |  |  |  |  | 
| 2753 |  |  |  |  |  |  | =head2 BENCHMARKING SMALL SERVERS | 
| 2754 |  |  |  |  |  |  |  | 
| 2755 |  |  |  |  |  |  | While event loops should scale (and select-based ones do not...) even to | 
| 2756 |  |  |  |  |  |  | large servers, most programs we (or I :) actually write have only a few | 
| 2757 |  |  |  |  |  |  | I/O watchers. | 
| 2758 |  |  |  |  |  |  |  | 
| 2759 |  |  |  |  |  |  | In this benchmark, I use the same benchmark program as in the large server | 
| 2760 |  |  |  |  |  |  | case, but it uses only eight "servers", of which three are active at any | 
| 2761 |  |  |  |  |  |  | one time. This should reflect performance for a small server relatively | 
| 2762 |  |  |  |  |  |  | well. | 
| 2763 |  |  |  |  |  |  |  | 
| 2764 |  |  |  |  |  |  | The columns are identical to the previous table. | 
| 2765 |  |  |  |  |  |  |  | 
| 2766 |  |  |  |  |  |  | =head3 Results | 
| 2767 |  |  |  |  |  |  |  | 
| 2768 |  |  |  |  |  |  | name sockets create request | 
| 2769 |  |  |  |  |  |  | EV      16  20.00    6.54 | 
| 2770 |  |  |  |  |  |  | Perl      16  25.75   12.62 | 
| 2771 |  |  |  |  |  |  | Event      16  81.27   35.86 | 
| 2772 |  |  |  |  |  |  | Glib      16  32.63   15.48 | 
| 2773 |  |  |  |  |  |  | POE      16 261.87  276.28 uses POE::Loop::Event | 
| 2774 |  |  |  |  |  |  |  | 
| 2775 |  |  |  |  |  |  | =head3 Discussion | 
| 2776 |  |  |  |  |  |  |  | 
| 2777 |  |  |  |  |  |  | The benchmark tries to test the performance of a typical small | 
| 2778 |  |  |  |  |  |  | server. While knowing how various event loops perform is interesting, keep | 
| 2779 |  |  |  |  |  |  | in mind that their overhead in this case is usually not as important, due | 
| 2780 |  |  |  |  |  |  | to the small absolute number of watchers (that is, you need efficiency and | 
| 2781 |  |  |  |  |  |  | speed most when you have lots of watchers, not when you only have a few of | 
| 2782 |  |  |  |  |  |  | them). | 
| 2783 |  |  |  |  |  |  |  | 
| 2784 |  |  |  |  |  |  | EV is again fastest. | 
| 2785 |  |  |  |  |  |  |  | 
| 2786 |  |  |  |  |  |  | Perl again comes second. It is noticeably faster than the C-based event | 
| 2787 |  |  |  |  |  |  | loops Event and Glib, although the difference is too small to really | 
| 2788 |  |  |  |  |  |  | matter. | 
| 2789 |  |  |  |  |  |  |  | 
| 2790 |  |  |  |  |  |  | POE also performs much better in this case, but is is still far behind the | 
| 2791 |  |  |  |  |  |  | others. | 
| 2792 |  |  |  |  |  |  |  | 
| 2793 |  |  |  |  |  |  | =head3 Summary | 
| 2794 |  |  |  |  |  |  |  | 
| 2795 |  |  |  |  |  |  | =over 4 | 
| 2796 |  |  |  |  |  |  |  | 
| 2797 |  |  |  |  |  |  | =item * C-based event loops perform very well with small number of | 
| 2798 |  |  |  |  |  |  | watchers, as the management overhead dominates. | 
| 2799 |  |  |  |  |  |  |  | 
| 2800 |  |  |  |  |  |  | =back | 
| 2801 |  |  |  |  |  |  |  | 
| 2802 |  |  |  |  |  |  | =head2 THE IO::Lambda BENCHMARK | 
| 2803 |  |  |  |  |  |  |  | 
| 2804 |  |  |  |  |  |  | Recently I was told about the benchmark in the IO::Lambda manpage, which | 
| 2805 |  |  |  |  |  |  | could be misinterpreted to make AnyEvent look bad. In fact, the benchmark | 
| 2806 |  |  |  |  |  |  | simply compares IO::Lambda with POE, and IO::Lambda looks better (which | 
| 2807 |  |  |  |  |  |  | shouldn't come as a surprise to anybody). As such, the benchmark is | 
| 2808 |  |  |  |  |  |  | fine, and mostly shows that the AnyEvent backend from IO::Lambda isn't | 
| 2809 |  |  |  |  |  |  | very optimal. But how would AnyEvent compare when used without the extra | 
| 2810 |  |  |  |  |  |  | baggage? To explore this, I wrote the equivalent benchmark for AnyEvent. | 
| 2811 |  |  |  |  |  |  |  | 
| 2812 |  |  |  |  |  |  | The benchmark itself creates an echo-server, and then, for 500 times, | 
| 2813 |  |  |  |  |  |  | connects to the echo server, sends a line, waits for the reply, and then | 
| 2814 |  |  |  |  |  |  | creates the next connection. This is a rather bad benchmark, as it doesn't | 
| 2815 |  |  |  |  |  |  | test the efficiency of the framework or much non-blocking I/O, but it is a | 
| 2816 |  |  |  |  |  |  | benchmark nevertheless. | 
| 2817 |  |  |  |  |  |  |  | 
| 2818 |  |  |  |  |  |  | name                    runtime | 
| 2819 |  |  |  |  |  |  | Lambda/select           0.330 sec | 
| 2820 |  |  |  |  |  |  | + optimized          0.122 sec | 
| 2821 |  |  |  |  |  |  | Lambda/AnyEvent         0.327 sec | 
| 2822 |  |  |  |  |  |  | + optimized          0.138 sec | 
| 2823 |  |  |  |  |  |  | Raw sockets/select      0.077 sec | 
| 2824 |  |  |  |  |  |  | POE/select, components  0.662 sec | 
| 2825 |  |  |  |  |  |  | POE/select, raw sockets 0.226 sec | 
| 2826 |  |  |  |  |  |  | POE/select, optimized   0.404 sec | 
| 2827 |  |  |  |  |  |  |  | 
| 2828 |  |  |  |  |  |  | AnyEvent/select/nb      0.085 sec | 
| 2829 |  |  |  |  |  |  | AnyEvent/EV/nb          0.068 sec | 
| 2830 |  |  |  |  |  |  | +state machine       0.134 sec | 
| 2831 |  |  |  |  |  |  |  | 
| 2832 |  |  |  |  |  |  | The benchmark is also a bit unfair (my fault): the IO::Lambda/POE | 
| 2833 |  |  |  |  |  |  | benchmarks actually make blocking connects and use 100% blocking I/O, | 
| 2834 |  |  |  |  |  |  | defeating the purpose of an event-based solution. All of the newly | 
| 2835 |  |  |  |  |  |  | written AnyEvent benchmarks use 100% non-blocking connects (using | 
| 2836 |  |  |  |  |  |  | AnyEvent::Socket::tcp_connect and the asynchronous pure perl DNS | 
| 2837 |  |  |  |  |  |  | resolver), so AnyEvent is at a disadvantage here, as non-blocking connects | 
| 2838 |  |  |  |  |  |  | generally require a lot more bookkeeping and event handling than blocking | 
| 2839 |  |  |  |  |  |  | connects (which involve a single syscall only). | 
| 2840 |  |  |  |  |  |  |  | 
| 2841 |  |  |  |  |  |  | The last AnyEvent benchmark additionally uses L, which | 
| 2842 |  |  |  |  |  |  | offers similar expressive power as POE and IO::Lambda, using conventional | 
| 2843 |  |  |  |  |  |  | Perl syntax. This means that both the echo server and the client are 100% | 
| 2844 |  |  |  |  |  |  | non-blocking, further placing it at a disadvantage. | 
| 2845 |  |  |  |  |  |  |  | 
| 2846 |  |  |  |  |  |  | As you can see, the AnyEvent + EV combination even beats the | 
| 2847 |  |  |  |  |  |  | hand-optimised "raw sockets benchmark", while AnyEvent + its pure perl | 
| 2848 |  |  |  |  |  |  | backend easily beats IO::Lambda and POE. | 
| 2849 |  |  |  |  |  |  |  | 
| 2850 |  |  |  |  |  |  | And even the 100% non-blocking version written using the high-level (and | 
| 2851 |  |  |  |  |  |  | slow :) L abstraction beats both POE and IO::Lambda | 
| 2852 |  |  |  |  |  |  | higher level ("unoptimised") abstractions by a large margin, even though | 
| 2853 |  |  |  |  |  |  | it does all of DNS, tcp-connect and socket I/O in a non-blocking way. | 
| 2854 |  |  |  |  |  |  |  | 
| 2855 |  |  |  |  |  |  | The two AnyEvent benchmarks programs can be found as F and | 
| 2856 |  |  |  |  |  |  | F in the AnyEvent distribution, the remaining benchmarks are | 
| 2857 |  |  |  |  |  |  | part of the IO::Lambda distribution and were used without any changes. | 
| 2858 |  |  |  |  |  |  |  | 
| 2859 |  |  |  |  |  |  |  | 
| 2860 |  |  |  |  |  |  | =head1 SIGNALS | 
| 2861 |  |  |  |  |  |  |  | 
| 2862 |  |  |  |  |  |  | AnyEvent currently installs handlers for these signals: | 
| 2863 |  |  |  |  |  |  |  | 
| 2864 |  |  |  |  |  |  | =over 4 | 
| 2865 |  |  |  |  |  |  |  | 
| 2866 |  |  |  |  |  |  | =item SIGCHLD | 
| 2867 |  |  |  |  |  |  |  | 
| 2868 |  |  |  |  |  |  | A handler for C is installed by AnyEvent's child watcher | 
| 2869 |  |  |  |  |  |  | emulation for event loops that do not support them natively. Also, some | 
| 2870 |  |  |  |  |  |  | event loops install a similar handler. | 
| 2871 |  |  |  |  |  |  |  | 
| 2872 |  |  |  |  |  |  | Additionally, when AnyEvent is loaded and SIGCHLD is set to IGNORE, then | 
| 2873 |  |  |  |  |  |  | AnyEvent will reset it to default, to avoid losing child exit statuses. | 
| 2874 |  |  |  |  |  |  |  | 
| 2875 |  |  |  |  |  |  | =item SIGPIPE | 
| 2876 |  |  |  |  |  |  |  | 
| 2877 |  |  |  |  |  |  | A no-op handler is installed for C when C<$SIG{PIPE}> is C | 
| 2878 |  |  |  |  |  |  | when AnyEvent gets loaded. | 
| 2879 |  |  |  |  |  |  |  | 
| 2880 |  |  |  |  |  |  | The rationale for this is that AnyEvent users usually do not really depend | 
| 2881 |  |  |  |  |  |  | on SIGPIPE delivery (which is purely an optimisation for shell use, or | 
| 2882 |  |  |  |  |  |  | badly-written programs), but C can cause spurious and rare | 
| 2883 |  |  |  |  |  |  | program exits as a lot of people do not expect C when writing to | 
| 2884 |  |  |  |  |  |  | some random socket. | 
| 2885 |  |  |  |  |  |  |  | 
| 2886 |  |  |  |  |  |  | The rationale for installing a no-op handler as opposed to ignoring it is | 
| 2887 |  |  |  |  |  |  | that this way, the handler will be restored to defaults on exec. | 
| 2888 |  |  |  |  |  |  |  | 
| 2889 |  |  |  |  |  |  | Feel free to install your own handler, or reset it to defaults. | 
| 2890 |  |  |  |  |  |  |  | 
| 2891 |  |  |  |  |  |  | =back | 
| 2892 |  |  |  |  |  |  |  | 
| 2893 |  |  |  |  |  |  | =cut | 
| 2894 |  |  |  |  |  |  |  | 
| 2895 |  |  |  |  |  |  | undef $SIG{CHLD} | 
| 2896 |  |  |  |  |  |  | if $SIG{CHLD} eq 'IGNORE'; | 
| 2897 |  |  |  |  |  |  |  | 
| 2898 |  |  |  |  |  |  | $SIG{PIPE} = sub { } | 
| 2899 |  |  |  |  |  |  | unless defined $SIG{PIPE}; | 
| 2900 |  |  |  |  |  |  |  | 
| 2901 |  |  |  |  |  |  | =head1 RECOMMENDED/OPTIONAL MODULES | 
| 2902 |  |  |  |  |  |  |  | 
| 2903 |  |  |  |  |  |  | One of AnyEvent's main goals is to be 100% Pure-Perl(tm): only perl (and | 
| 2904 |  |  |  |  |  |  | its built-in modules) are required to use it. | 
| 2905 |  |  |  |  |  |  |  | 
| 2906 |  |  |  |  |  |  | That does not mean that AnyEvent won't take advantage of some additional | 
| 2907 |  |  |  |  |  |  | modules if they are installed. | 
| 2908 |  |  |  |  |  |  |  | 
| 2909 |  |  |  |  |  |  | This section explains which additional modules will be used, and how they | 
| 2910 |  |  |  |  |  |  | affect AnyEvent's operation. | 
| 2911 |  |  |  |  |  |  |  | 
| 2912 |  |  |  |  |  |  | =over 4 | 
| 2913 |  |  |  |  |  |  |  | 
| 2914 |  |  |  |  |  |  | =item L | 
| 2915 |  |  |  |  |  |  |  | 
| 2916 |  |  |  |  |  |  | This slightly arcane module is used to implement fast signal handling: To | 
| 2917 |  |  |  |  |  |  | my knowledge, there is no way to do completely race-free and quick | 
| 2918 |  |  |  |  |  |  | signal handling in pure perl. To ensure that signals still get | 
| 2919 |  |  |  |  |  |  | delivered, AnyEvent will start an interval timer to wake up perl (and | 
| 2920 |  |  |  |  |  |  | catch the signals) with some delay (default is 10 seconds, look for | 
| 2921 |  |  |  |  |  |  | C<$AnyEvent::MAX_SIGNAL_LATENCY>). | 
| 2922 |  |  |  |  |  |  |  | 
| 2923 |  |  |  |  |  |  | If this module is available, then it will be used to implement signal | 
| 2924 |  |  |  |  |  |  | catching, which means that signals will not be delayed, and the event loop | 
| 2925 |  |  |  |  |  |  | will not be interrupted regularly, which is more efficient (and good for | 
| 2926 |  |  |  |  |  |  | battery life on laptops). | 
| 2927 |  |  |  |  |  |  |  | 
| 2928 |  |  |  |  |  |  | This affects not just the pure-perl event loop, but also other event loops | 
| 2929 |  |  |  |  |  |  | that have no signal handling on their own (e.g. Glib, Tk, Qt). | 
| 2930 |  |  |  |  |  |  |  | 
| 2931 |  |  |  |  |  |  | Some event loops (POE, Event, Event::Lib) offer signal watchers natively, | 
| 2932 |  |  |  |  |  |  | and either employ their own workarounds (POE) or use AnyEvent's workaround | 
| 2933 |  |  |  |  |  |  | (using C<$AnyEvent::MAX_SIGNAL_LATENCY>). Installing L | 
| 2934 |  |  |  |  |  |  | does nothing for those backends. | 
| 2935 |  |  |  |  |  |  |  | 
| 2936 |  |  |  |  |  |  | =item L | 
| 2937 |  |  |  |  |  |  |  | 
| 2938 |  |  |  |  |  |  | This module isn't really "optional", as it is simply one of the backend | 
| 2939 |  |  |  |  |  |  | event loops that AnyEvent can use. However, it is simply the best event | 
| 2940 |  |  |  |  |  |  | loop available in terms of features, speed and stability: It supports | 
| 2941 |  |  |  |  |  |  | the AnyEvent API optimally, implements all the watcher types in XS, does | 
| 2942 |  |  |  |  |  |  | automatic timer adjustments even when no monotonic clock is available, | 
| 2943 |  |  |  |  |  |  | can take avdantage of advanced kernel interfaces such as C and | 
| 2944 |  |  |  |  |  |  | C, and is the fastest backend I. You can even embed | 
| 2945 |  |  |  |  |  |  | L/L in it (or vice versa, see L and L). | 
| 2946 |  |  |  |  |  |  |  | 
| 2947 |  |  |  |  |  |  | If you only use backends that rely on another event loop (e.g. C), | 
| 2948 |  |  |  |  |  |  | then this module will do nothing for you. | 
| 2949 |  |  |  |  |  |  |  | 
| 2950 |  |  |  |  |  |  | =item L | 
| 2951 |  |  |  |  |  |  |  | 
| 2952 |  |  |  |  |  |  | The guard module, when used, will be used to implement | 
| 2953 |  |  |  |  |  |  | C. This speeds up guards considerably (and uses a | 
| 2954 |  |  |  |  |  |  | lot less memory), but otherwise doesn't affect guard operation much. It is | 
| 2955 |  |  |  |  |  |  | purely used for performance. | 
| 2956 |  |  |  |  |  |  |  | 
| 2957 |  |  |  |  |  |  | =item L and L | 
| 2958 |  |  |  |  |  |  |  | 
| 2959 |  |  |  |  |  |  | One of these modules is required when you want to read or write JSON data | 
| 2960 |  |  |  |  |  |  | via L. L is also written in pure-perl, but can take | 
| 2961 |  |  |  |  |  |  | advantage of the ultra-high-speed L module when it is installed. | 
| 2962 |  |  |  |  |  |  |  | 
| 2963 |  |  |  |  |  |  | =item L | 
| 2964 |  |  |  |  |  |  |  | 
| 2965 |  |  |  |  |  |  | Implementing TLS/SSL in Perl is certainly interesting, but not very | 
| 2966 |  |  |  |  |  |  | worthwhile: If this module is installed, then L (with | 
| 2967 |  |  |  |  |  |  | the help of L), gains the ability to do TLS/SSL. | 
| 2968 |  |  |  |  |  |  |  | 
| 2969 |  |  |  |  |  |  | =item L | 
| 2970 |  |  |  |  |  |  |  | 
| 2971 |  |  |  |  |  |  | This module is part of perl since release 5.008. It will be used when the | 
| 2972 |  |  |  |  |  |  | chosen event library does not come with a timing source of its own. The | 
| 2973 |  |  |  |  |  |  | pure-perl event loop (L) will additionally load it to | 
| 2974 |  |  |  |  |  |  | try to use a monotonic clock for timing stability. | 
| 2975 |  |  |  |  |  |  |  | 
| 2976 |  |  |  |  |  |  | =item L (and L) | 
| 2977 |  |  |  |  |  |  |  | 
| 2978 |  |  |  |  |  |  | The default implementation of L is to do I/O synchronously, | 
| 2979 |  |  |  |  |  |  | stopping programs while they access the disk, which is fine for a lot of | 
| 2980 |  |  |  |  |  |  | programs. | 
| 2981 |  |  |  |  |  |  |  | 
| 2982 |  |  |  |  |  |  | Installing AnyEvent::AIO (and its IO::AIO dependency) makes it switch to | 
| 2983 |  |  |  |  |  |  | a true asynchronous implementation, so event processing can continue even | 
| 2984 |  |  |  |  |  |  | while waiting for disk I/O. | 
| 2985 |  |  |  |  |  |  |  | 
| 2986 |  |  |  |  |  |  | =back | 
| 2987 |  |  |  |  |  |  |  | 
| 2988 |  |  |  |  |  |  |  | 
| 2989 |  |  |  |  |  |  | =head1 FORK | 
| 2990 |  |  |  |  |  |  |  | 
| 2991 |  |  |  |  |  |  | Most event libraries are not fork-safe. The ones who are usually are | 
| 2992 |  |  |  |  |  |  | because they rely on inefficient but fork-safe C | 
| 2993 |  |  |  |  |  |  | - higher performance APIs such as BSD's kqueue or the dreaded Linux epoll | 
| 2994 |  |  |  |  |  |  | are usually badly thought-out hacks that are incompatible with fork in | 
| 2995 |  |  |  |  |  |  | one way or another. Only L is fully fork-aware and ensures that you | 
| 2996 |  |  |  |  |  |  | continue event-processing in both parent and child (or both, if you know | 
| 2997 |  |  |  |  |  |  | what you are doing). | 
| 2998 |  |  |  |  |  |  |  | 
| 2999 |  |  |  |  |  |  | This means that, in general, you cannot fork and do event processing in | 
| 3000 |  |  |  |  |  |  | the child if the event library was initialised before the fork (which | 
| 3001 |  |  |  |  |  |  | usually happens when the first AnyEvent watcher is created, or the library | 
| 3002 |  |  |  |  |  |  | is loaded). | 
| 3003 |  |  |  |  |  |  |  | 
| 3004 |  |  |  |  |  |  | If you have to fork, you must either do so I creating your first | 
| 3005 |  |  |  |  |  |  | watcher OR you must not use AnyEvent at all in the child OR you must do | 
| 3006 |  |  |  |  |  |  | something completely out of the scope of AnyEvent (see below). | 
| 3007 |  |  |  |  |  |  |  | 
| 3008 |  |  |  |  |  |  | The problem of doing event processing in the parent I the child | 
| 3009 |  |  |  |  |  |  | is much more complicated: even for backends that I fork-aware or | 
| 3010 |  |  |  |  |  |  | fork-safe, their behaviour is not usually what you want: fork clones all | 
| 3011 |  |  |  |  |  |  | watchers, that means all timers, I/O watchers etc. are active in both | 
| 3012 |  |  |  |  |  |  | parent and child, which is almost never what you want. Using C | 
| 3013 |  |  |  |  |  |  | to start worker children from some kind of manage prrocess is usually | 
| 3014 |  |  |  |  |  |  | preferred, because it is much easier and cleaner, at the expense of having | 
| 3015 |  |  |  |  |  |  | to have another binary. | 
| 3016 |  |  |  |  |  |  |  | 
| 3017 |  |  |  |  |  |  | In addition to logical problems with fork, there are also implementation | 
| 3018 |  |  |  |  |  |  | problems. For example, on POSIX systems, you cannot fork at all in Perl | 
| 3019 |  |  |  |  |  |  | code if a thread (I am talking of pthreads here) was ever created in the | 
| 3020 |  |  |  |  |  |  | process, and this is just the tip of the iceberg. In general, using fork | 
| 3021 |  |  |  |  |  |  | from Perl is difficult, and attempting to use fork without an exec to | 
| 3022 |  |  |  |  |  |  | implement some kind of parallel processing is almost certainly doomed. | 
| 3023 |  |  |  |  |  |  |  | 
| 3024 |  |  |  |  |  |  | To safely fork and exec, you should use a module such as | 
| 3025 |  |  |  |  |  |  | L that let's you safely fork and exec new processes. | 
| 3026 |  |  |  |  |  |  |  | 
| 3027 |  |  |  |  |  |  | If you want to do multiprocessing using processes, you can | 
| 3028 |  |  |  |  |  |  | look at the L module (and some related modules | 
| 3029 |  |  |  |  |  |  | such as L, L and | 
| 3030 |  |  |  |  |  |  | L). This module allows you to safely create | 
| 3031 |  |  |  |  |  |  | subprocesses without any limitations - you can use X11 toolkits or | 
| 3032 |  |  |  |  |  |  | AnyEvent in the children created by L safely and without | 
| 3033 |  |  |  |  |  |  | any special precautions. | 
| 3034 |  |  |  |  |  |  |  | 
| 3035 |  |  |  |  |  |  |  | 
| 3036 |  |  |  |  |  |  | =head1 SECURITY CONSIDERATIONS | 
| 3037 |  |  |  |  |  |  |  | 
| 3038 |  |  |  |  |  |  | AnyEvent can be forced to load any event model via | 
| 3039 |  |  |  |  |  |  | $ENV{PERL_ANYEVENT_MODEL}. While this cannot (to my knowledge) be used to | 
| 3040 |  |  |  |  |  |  | execute arbitrary code or directly gain access, it can easily be used to | 
| 3041 |  |  |  |  |  |  | make the program hang or malfunction in subtle ways, as AnyEvent watchers | 
| 3042 |  |  |  |  |  |  | will not be active when the program uses a different event model than | 
| 3043 |  |  |  |  |  |  | specified in the variable. | 
| 3044 |  |  |  |  |  |  |  | 
| 3045 |  |  |  |  |  |  | You can make AnyEvent completely ignore this variable by deleting it | 
| 3046 |  |  |  |  |  |  | before the first watcher gets created, e.g. with a C block: | 
| 3047 |  |  |  |  |  |  |  | 
| 3048 |  |  |  |  |  |  | BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} } | 
| 3049 |  |  |  |  |  |  |  | 
| 3050 |  |  |  |  |  |  | use AnyEvent; | 
| 3051 |  |  |  |  |  |  |  | 
| 3052 |  |  |  |  |  |  | Similar considerations apply to $ENV{PERL_ANYEVENT_VERBOSE}, as that can | 
| 3053 |  |  |  |  |  |  | be used to probe what backend is used and gain other information (which is | 
| 3054 |  |  |  |  |  |  | probably even less useful to an attacker than PERL_ANYEVENT_MODEL), and | 
| 3055 |  |  |  |  |  |  | $ENV{PERL_ANYEVENT_STRICT}. | 
| 3056 |  |  |  |  |  |  |  | 
| 3057 |  |  |  |  |  |  | Note that AnyEvent will remove I environment variables starting with | 
| 3058 |  |  |  |  |  |  | C from C<%ENV> when it is loaded while taint mode is | 
| 3059 |  |  |  |  |  |  | enabled. | 
| 3060 |  |  |  |  |  |  |  | 
| 3061 |  |  |  |  |  |  |  | 
| 3062 |  |  |  |  |  |  | =head1 BUGS | 
| 3063 |  |  |  |  |  |  |  | 
| 3064 |  |  |  |  |  |  | Perl 5.8 has numerous memleaks that sometimes hit this module and are hard | 
| 3065 |  |  |  |  |  |  | to work around. If you suffer from memleaks, first upgrade to Perl 5.10 | 
| 3066 |  |  |  |  |  |  | and check wether the leaks still show up. (Perl 5.10.0 has other annoying | 
| 3067 |  |  |  |  |  |  | memleaks, such as leaking on C | 
| 3068 |  |  |  |  |  |  | pronounced). | 
| 3069 |  |  |  |  |  |  |  | 
| 3070 |  |  |  |  |  |  |  | 
| 3071 |  |  |  |  |  |  | =head1 SEE ALSO | 
| 3072 |  |  |  |  |  |  |  | 
| 3073 |  |  |  |  |  |  | Tutorial/Introduction: L. | 
| 3074 |  |  |  |  |  |  |  | 
| 3075 |  |  |  |  |  |  | FAQ: L. | 
| 3076 |  |  |  |  |  |  |  | 
| 3077 |  |  |  |  |  |  | Utility functions: L (misc. grab-bag), L | 
| 3078 |  |  |  |  |  |  | (simply logging). | 
| 3079 |  |  |  |  |  |  |  | 
| 3080 |  |  |  |  |  |  | Development/Debugging: L (stricter checking), | 
| 3081 |  |  |  |  |  |  | L (interactive shell, watcher tracing). | 
| 3082 |  |  |  |  |  |  |  | 
| 3083 |  |  |  |  |  |  | Supported event modules: L, L, L, | 
| 3084 |  |  |  |  |  |  | L, L, L, L, L, L, | 
| 3085 |  |  |  |  |  |  | L, L, L, L, L. | 
| 3086 |  |  |  |  |  |  |  | 
| 3087 |  |  |  |  |  |  | Implementations: L, L, | 
| 3088 |  |  |  |  |  |  | L, L, L, | 
| 3089 |  |  |  |  |  |  | L, L, | 
| 3090 |  |  |  |  |  |  | L, L, L, | 
| 3091 |  |  |  |  |  |  | L, L, L. | 
| 3092 |  |  |  |  |  |  |  | 
| 3093 |  |  |  |  |  |  | Non-blocking handles, pipes, stream sockets, TCP clients and | 
| 3094 |  |  |  |  |  |  | servers: L, L, L. | 
| 3095 |  |  |  |  |  |  |  | 
| 3096 |  |  |  |  |  |  | Asynchronous File I/O: L. | 
| 3097 |  |  |  |  |  |  |  | 
| 3098 |  |  |  |  |  |  | Asynchronous DNS: L. | 
| 3099 |  |  |  |  |  |  |  | 
| 3100 |  |  |  |  |  |  | Thread support: L, L, L, L. | 
| 3101 |  |  |  |  |  |  |  | 
| 3102 |  |  |  |  |  |  | Nontrivial usage examples: L, L, | 
| 3103 |  |  |  |  |  |  | L. | 
| 3104 |  |  |  |  |  |  |  | 
| 3105 |  |  |  |  |  |  |  | 
| 3106 |  |  |  |  |  |  | =head1 AUTHOR | 
| 3107 |  |  |  |  |  |  |  | 
| 3108 |  |  |  |  |  |  | Marc Lehmann | 
| 3109 |  |  |  |  |  |  | http://anyevent.schmorp.de | 
| 3110 |  |  |  |  |  |  |  | 
| 3111 |  |  |  |  |  |  | =cut | 
| 3112 |  |  |  |  |  |  |  | 
| 3113 |  |  |  |  |  |  | 1 | 
| 3114 |  |  |  |  |  |  |  |