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
|
|
239189
|
require "AnyEvent/constants.pl"; |
1266
|
82
|
|
|
|
|
336
|
&AnyEvent::common_sense; |
1267
|
|
|
|
|
|
|
} |
1268
|
|
|
|
|
|
|
|
1269
|
82
|
|
|
82
|
|
528
|
use Carp (); |
|
82
|
|
|
|
|
159
|
|
|
82
|
|
|
|
|
27262
|
|
1270
|
|
|
|
|
|
|
|
1271
|
|
|
|
|
|
|
our $VERSION = 7.15; |
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
|
|
5403
|
eval "sub TAINT (){" . (${^TAINT}*1) . "}"; |
1281
|
|
|
|
|
|
|
|
1282
|
82
|
50
|
|
|
|
681
|
delete @ENV{grep /^PERL_ANYEVENT_/, keys %ENV} |
1283
|
|
|
|
|
|
|
if ${^TAINT}; |
1284
|
|
|
|
|
|
|
|
1285
|
|
|
|
|
|
|
$ENV{"PERL_ANYEVENT_$_"} = $ENV{"AE_$_"} |
1286
|
82
|
|
33
|
|
|
2219
|
for grep s/^AE_// && !exists $ENV{"PERL_ANYEVENT_$_"}, keys %ENV; |
1287
|
|
|
|
|
|
|
|
1288
|
82
|
50
|
|
|
|
359
|
@ENV{grep /^PERL_ANYEVENT_/, keys %ENV} = () |
1289
|
|
|
|
|
|
|
if ${^TAINT}; |
1290
|
|
|
|
|
|
|
|
1291
|
|
|
|
|
|
|
# $ENV{PERL_ANYEVENT_xxx} now valid |
1292
|
|
|
|
|
|
|
|
1293
|
82
|
50
|
|
|
|
462
|
$VERBOSE = length $ENV{PERL_ANYEVENT_VERBOSE} ? $ENV{PERL_ANYEVENT_VERBOSE}*1 : 4; |
1294
|
|
|
|
|
|
|
|
1295
|
82
|
|
|
|
|
153
|
my $idx; |
1296
|
|
|
|
|
|
|
$PROTOCOL{$_} = ++$idx |
1297
|
82
|
|
50
|
|
|
41710
|
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
|
399
|
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
|
|
|
|
|
82560
|
} |
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
|
|
298
|
fcntl $_[0], AnyEvent::F_SETFL, $_[1] ? AnyEvent::O_NONBLOCK : 0; |
1385
|
|
|
|
|
|
|
} |
1386
|
82
|
|
|
82
|
|
112939
|
; |
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
|
109
|
_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
|
|
75
|
my @pkg = ("AnyEvent", (map $_->[0], grep defined, @isa_hook), $MODEL); |
1423
|
|
|
|
|
|
|
|
1424
|
17
|
|
|
|
|
395
|
@{"$pkg[$_-1]::ISA"} = $pkg[$_] |
1425
|
15
|
|
|
|
|
75
|
for 1 .. $#pkg; |
1426
|
|
|
|
|
|
|
|
1427
|
15
|
100
|
66
|
|
|
116
|
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
|
|
4
|
my ($i, $pkg, $reset_ae) = @_; |
1434
|
|
|
|
|
|
|
|
1435
|
1
|
50
|
|
|
|
7
|
$isa_hook[$i] = $pkg ? [$pkg, $reset_ae] : undef; |
1436
|
|
|
|
|
|
|
|
1437
|
1
|
|
|
|
|
4
|
_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
|
243
|
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
|
|
|
|
101
|
if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; |
1454
|
|
|
|
|
|
|
|
1455
|
12
|
|
|
|
|
71
|
local $!; # for good measure |
1456
|
12
|
|
|
|
|
53
|
local $SIG{__DIE__}; # we use eval |
1457
|
|
|
|
|
|
|
|
1458
|
|
|
|
|
|
|
# free some memory |
1459
|
12
|
|
|
4
|
|
91
|
*detect = sub () { $MODEL }; |
|
4
|
|
|
|
|
61
|
|
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
|
|
|
|
|
43
|
delete @{"AnyEvent::"}{@methods}; |
|
12
|
|
|
|
|
150
|
|
1466
|
12
|
|
|
|
|
37
|
undef @methods; |
1467
|
|
|
|
|
|
|
|
1468
|
12
|
50
|
|
|
|
70
|
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
|
|
|
|
|
49
|
for (@REGISTRY, @models) { |
1482
|
50
|
|
|
|
|
121
|
my ($package, $model) = @$_; |
1483
|
50
|
100
|
|
|
|
70
|
if (${"$package\::VERSION"} > 0) { |
|
50
|
|
|
|
|
342
|
|
1484
|
10
|
50
|
|
|
|
657
|
if (eval "require $model") { |
1485
|
10
|
|
|
|
|
62
|
AnyEvent::log 7 => "Autodetected model '$model', using it."; |
1486
|
10
|
|
|
|
|
21
|
$MODEL = $model; |
1487
|
10
|
|
|
|
|
29
|
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
|
|
|
|
56
|
unless ($MODEL) { |
1495
|
|
|
|
|
|
|
# try to autoload a model |
1496
|
2
|
|
|
|
|
7
|
for (@REGISTRY, @models) { |
1497
|
2
|
|
|
|
|
6
|
my ($package, $model) = @$_; |
1498
|
2
|
50
|
33
|
|
|
124
|
if ( |
|
|
|
33
|
|
|
|
|
1499
|
|
|
|
|
|
|
eval "require $package" |
1500
|
2
|
|
|
|
|
4659
|
and ${"$package\::VERSION"} > 0 |
1501
|
|
|
|
|
|
|
and eval "require $model" |
1502
|
|
|
|
|
|
|
) { |
1503
|
2
|
|
|
|
|
15
|
AnyEvent::log 7 => "Autoloaded model '$model', using it."; |
1504
|
2
|
|
|
|
|
4
|
$MODEL = $model; |
1505
|
2
|
|
|
|
|
6
|
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
|
|
|
|
|
191
|
undef @models; |
1516
|
12
|
|
|
|
|
30
|
undef @REGISTRY; |
1517
|
|
|
|
|
|
|
|
1518
|
12
|
|
|
|
|
25
|
push @{"$MODEL\::ISA"}, "AnyEvent::Base"; |
|
12
|
|
|
|
|
169
|
|
1519
|
|
|
|
|
|
|
|
1520
|
|
|
|
|
|
|
# now nuke some methods that are overridden by the backend. |
1521
|
|
|
|
|
|
|
# SUPER usage is not allowed in these. |
1522
|
12
|
|
|
|
|
47
|
for (qw(time signal child idle)) { |
1523
|
18
|
|
|
|
|
154
|
undef &{"AnyEvent::Base::$_"} |
1524
|
48
|
100
|
|
|
|
69
|
if defined &{"$MODEL\::$_"}; |
|
48
|
|
|
|
|
206
|
|
1525
|
|
|
|
|
|
|
} |
1526
|
|
|
|
|
|
|
|
1527
|
12
|
|
|
|
|
52
|
_isa_set; |
1528
|
|
|
|
|
|
|
|
1529
|
|
|
|
|
|
|
# we're officially open! |
1530
|
|
|
|
|
|
|
|
1531
|
12
|
50
|
|
|
|
54
|
if ($ENV{PERL_ANYEVENT_STRICT}) { |
1532
|
0
|
|
|
|
|
0
|
require AnyEvent::Strict; |
1533
|
|
|
|
|
|
|
} |
1534
|
|
|
|
|
|
|
|
1535
|
12
|
50
|
|
|
|
49
|
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
|
|
|
|
48
|
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
|
|
|
|
|
49
|
(shift @post_detect)->() while @post_detect; |
1555
|
12
|
|
|
|
|
25
|
undef @post_detect; |
1556
|
|
|
|
|
|
|
|
1557
|
|
|
|
|
|
|
*post_detect = sub(&) { |
1558
|
0
|
|
|
1
|
|
0
|
shift->(); |
1559
|
|
|
|
|
|
|
|
1560
|
|
|
|
|
|
|
undef |
1561
|
12
|
|
|
|
|
79
|
}; |
|
0
|
|
|
|
|
0
|
|
1562
|
|
|
|
|
|
|
|
1563
|
12
|
|
|
|
|
108
|
$MODEL |
1564
|
|
|
|
|
|
|
} |
1565
|
|
|
|
|
|
|
|
1566
|
|
|
|
|
|
|
for my $name (@methods) { |
1567
|
|
|
|
|
|
|
*$name = sub { |
1568
|
12
|
|
|
11
|
|
916
|
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
|
|
|
|
|
131
|
|
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
|
29540
|
eval q{ |
|
2
|
|
|
2
|
1
|
433
|
|
|
2
|
|
|
2
|
1
|
1154
|
|
|
8
|
|
|
8
|
1
|
311
|
|
|
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
|
|
|
|
134954
|
die if $@; |
1652
|
|
|
|
|
|
|
} |
1653
|
|
|
|
|
|
|
|
1654
|
82
|
|
|
82
|
|
476
|
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
|
|
2951
|
eval q{ # poor man's autoloading {} |
|
42
|
100
|
|
42
|
|
11575
|
|
|
75
|
|
|
|
|
8398
|
|
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
|
|
|
|
75
|
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
|
|
280
|
&& eval "use Async::Interrupt 1.02 (); 1") |
|
15
|
|
|
0
|
|
185
|
|
|
12
|
|
|
|
|
316
|
|
|
12
|
|
|
|
|
93
|
|
1713
|
|
|
|
|
|
|
unless defined $HAVE_ASYNC_INTERRUPT; |
1714
|
|
|
|
|
|
|
|
1715
|
6
|
|
|
|
|
131
|
$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
|
|
194
|
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
|
|
16
|
sub sig2num ($) { &$_sig_name_init; &sig2num } |
|
3
|
|
|
|
|
66
|
|
1771
|
0
|
|
|
0
|
|
0
|
sub sig2name($) { &$_sig_name_init; &sig2name } |
|
0
|
|
|
|
|
0
|
|
1772
|
|
|
|
|
|
|
|
1773
|
|
|
|
|
|
|
sub signal { |
1774
|
12
|
100
|
|
12
|
|
3069
|
eval q{ # poor man's autoloading {} |
|
7
|
|
|
0
|
|
237
|
|
|
7
|
|
|
|
|
25
|
|
|
12
|
|
|
|
|
166
|
|
|
16
|
|
|
|
|
38
|
|
|
16
|
|
|
|
|
238
|
|
|
12
|
|
|
|
|
365
|
|
|
12
|
|
|
|
|
55
|
|
|
12
|
|
|
|
|
188
|
|
|
11
|
|
|
|
|
51
|
|
|
11
|
|
|
|
|
72
|
|
|
12
|
|
|
|
|
260
|
|
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
|
|
|
|
57
|
die if $@; |
1875
|
|
|
|
|
|
|
|
1876
|
12
|
|
|
|
|
167
|
&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
|
|
546
|
my (undef, $rpid, $rstatus) = @_; |
1888
|
|
|
|
|
|
|
|
1889
|
|
|
|
|
|
|
$_->($rpid, $rstatus) |
1890
|
24
|
100
|
|
|
|
187
|
for values %{ $PID_CB{$rpid} || {} }, |
|
20
|
|
|
|
|
829
|
|
1891
|
19
|
100
|
|
|
|
282
|
values %{ $PID_CB{0} || {} }; |
1892
|
|
|
|
|
|
|
} |
1893
|
|
|
|
|
|
|
|
1894
|
|
|
|
|
|
|
sub child { |
1895
|
11
|
|
|
2
|
|
1317
|
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
|
11
|
100
|
|
|
|
128
|
die if $@; |
1930
|
|
|
|
|
|
|
|
1931
|
11
|
|
|
|
|
129
|
&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
|
9
|
|
|
0
|
|
58
|
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
|
9
|
0
|
|
|
|
412
|
die if $@; |
1973
|
|
|
|
|
|
|
|
1974
|
12
|
|
|
|
|
176
|
&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
|
12
|
|
|
0
|
|
51
|
my $class = shift; |
1984
|
12
|
|
|
|
|
45
|
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
|
48
|
|
|
36
|
|
174
|
*{'AnyEvent::CondVar::Base::(&{}'} = sub { my $self = shift; sub { $self->send (@_) } }; # &{} |
|
48
|
|
|
|
|
178
|
|
|
48
|
|
|
|
|
428
|
|
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
|
|
5431
|
my $cv = shift; |
2011
|
88
|
|
|
|
|
378
|
$cv->{_ae_sent} = [@_]; |
2012
|
88
|
100
|
|
|
|
317
|
(delete $cv->{_ae_cb})->($cv) if $cv->{_ae_cb}; |
2013
|
88
|
|
|
|
|
425
|
$cv->_send; |
2014
|
|
|
|
|
|
|
} |
2015
|
|
|
|
|
|
|
|
2016
|
|
|
|
|
|
|
sub croak { |
2017
|
1
|
|
|
1
|
|
17
|
$_[0]{_ae_croak} = $_[1]; |
2018
|
1
|
|
|
|
|
2
|
$_[0]->send; |
2019
|
|
|
|
|
|
|
} |
2020
|
|
|
|
|
|
|
|
2021
|
|
|
|
|
|
|
sub ready { |
2022
|
|
|
|
|
|
|
$_[0]{_ae_sent} |
2023
|
2
|
|
|
2
|
|
13
|
} |
2024
|
|
|
|
|
|
|
|
2025
|
|
|
|
|
|
|
sub recv { |
2026
|
84
|
100
|
|
84
|
|
1016
|
unless ($_[0]{_ae_sent}) { |
2027
|
43
|
50
|
|
|
|
111
|
$WAITING |
2028
|
|
|
|
|
|
|
and Carp::croak "AnyEvent::CondVar: recursive blocking wait attempted"; |
2029
|
|
|
|
|
|
|
|
2030
|
43
|
|
|
|
|
135
|
local $WAITING = 1; |
2031
|
43
|
|
|
|
|
287
|
$_[0]->_wait; |
2032
|
|
|
|
|
|
|
} |
2033
|
|
|
|
|
|
|
|
2034
|
|
|
|
|
|
|
$_[0]{_ae_croak} |
2035
|
84
|
100
|
|
|
|
499
|
and Carp::croak $_[0]{_ae_croak}; |
2036
|
|
|
|
|
|
|
|
2037
|
|
|
|
|
|
|
wantarray |
2038
|
34
|
|
|
|
|
151
|
? @{ $_[0]{_ae_sent} } |
2039
|
82
|
100
|
|
|
|
272
|
: $_[0]{_ae_sent}[0] |
2040
|
|
|
|
|
|
|
} |
2041
|
|
|
|
|
|
|
|
2042
|
|
|
|
|
|
|
sub cb { |
2043
|
2
|
|
|
2
|
|
22
|
my $cv = shift; |
2044
|
|
|
|
|
|
|
|
2045
|
|
|
|
|
|
|
@_ |
2046
|
|
|
|
|
|
|
and $cv->{_ae_cb} = shift |
2047
|
|
|
|
|
|
|
and $cv->{_ae_sent} |
2048
|
2
|
50
|
100
|
|
|
49
|
and (delete $cv->{_ae_cb})->($cv); |
|
|
|
33
|
|
|
|
|
2049
|
|
|
|
|
|
|
|
2050
|
|
|
|
|
|
|
$cv->{_ae_cb} |
2051
|
2
|
|
|
|
|
5
|
} |
2052
|
|
|
|
|
|
|
|
2053
|
|
|
|
|
|
|
sub begin { |
2054
|
25
|
|
|
25
|
|
1102
|
++$_[0]{_ae_counter}; |
2055
|
25
|
100
|
|
|
|
85
|
$_[0]{_ae_end_cb} = $_[1] if @_ > 1; |
2056
|
|
|
|
|
|
|
} |
2057
|
|
|
|
|
|
|
|
2058
|
|
|
|
|
|
|
sub end { |
2059
|
25
|
100
|
|
25
|
|
84881
|
return if --$_[0]{_ae_counter}; |
2060
|
12
|
100
|
|
11
|
|
31
|
&{ $_[0]{_ae_end_cb} || sub { $_[0]->send } }; |
|
12
|
|
|
|
|
111
|
|
|
11
|
|
|
|
|
57
|
|
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
|
|
|
|
|
|
|
|