… | |
… | |
14 | |
14 | |
15 | AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent |
15 | AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent |
16 | |
16 | |
17 | =cut |
17 | =cut |
18 | |
18 | |
19 | our $VERSION = 4.151; |
19 | our $VERSION = 4.160; |
20 | |
20 | |
21 | =head1 SYNOPSIS |
21 | =head1 SYNOPSIS |
22 | |
22 | |
23 | use AnyEvent; |
23 | use AnyEvent; |
24 | use AnyEvent::Handle; |
24 | use AnyEvent::Handle; |
… | |
… | |
162 | be configured to accept only so-and-so much data that it cannot act on |
162 | be configured to accept only so-and-so much data that it cannot act on |
163 | (for example, when expecting a line, an attacker could send an unlimited |
163 | (for example, when expecting a line, an attacker could send an unlimited |
164 | amount of data without a callback ever being called as long as the line |
164 | amount of data without a callback ever being called as long as the line |
165 | isn't finished). |
165 | isn't finished). |
166 | |
166 | |
|
|
167 | =item autocork => <boolean> |
|
|
168 | |
|
|
169 | When disabled (the default), then C<push_write> will try to immediately |
|
|
170 | write the data to the handle if possible. This avoids having to register |
|
|
171 | a write watcher and wait for the next event loop iteration, but can be |
|
|
172 | inefficient if you write multiple small chunks (this disadvantage is |
|
|
173 | usually avoided by your kernel's nagle algorithm, see C<low_delay>). |
|
|
174 | |
|
|
175 | When enabled, then writes will always be queued till the next event loop |
|
|
176 | iteration. This is efficient when you do many small writes per iteration, |
|
|
177 | but less efficient when you do a single write only. |
|
|
178 | |
|
|
179 | =item no_delay => <boolean> |
|
|
180 | |
|
|
181 | When doing small writes on sockets, your operating system kernel might |
|
|
182 | wait a bit for more data before actually sending it out. This is called |
|
|
183 | the Nagle algorithm, and usually it is beneficial. |
|
|
184 | |
|
|
185 | In some situations you want as low a delay as possible, which cna be |
|
|
186 | accomplishd by setting this option to true. |
|
|
187 | |
|
|
188 | The default is your opertaing system's default behaviour, this option |
|
|
189 | explicitly enables or disables it, if possible. |
|
|
190 | |
167 | =item read_size => <bytes> |
191 | =item read_size => <bytes> |
168 | |
192 | |
169 | The default read block size (the amount of bytes this module will try to read |
193 | The default read block size (the amount of bytes this module will try to read |
170 | during each (loop iteration). Default: C<8192>. |
194 | during each (loop iteration). Default: C<8192>. |
171 | |
195 | |
… | |
… | |
246 | } |
270 | } |
247 | |
271 | |
248 | $self->{_activity} = AnyEvent->now; |
272 | $self->{_activity} = AnyEvent->now; |
249 | $self->_timeout; |
273 | $self->_timeout; |
250 | |
274 | |
251 | $self->on_drain (delete $self->{on_drain}) if $self->{on_drain}; |
275 | $self->on_drain (delete $self->{on_drain}) if exists $self->{on_drain}; |
|
|
276 | $self->no_delay (delete $self->{no_delay}) if exists $self->{no_delay}; |
252 | |
277 | |
253 | $self->start_read |
278 | $self->start_read |
254 | if $self->{on_read}; |
279 | if $self->{on_read}; |
255 | |
280 | |
256 | $self |
281 | $self |
… | |
… | |
318 | |
343 | |
319 | =cut |
344 | =cut |
320 | |
345 | |
321 | sub on_timeout { |
346 | sub on_timeout { |
322 | $_[0]{on_timeout} = $_[1]; |
347 | $_[0]{on_timeout} = $_[1]; |
|
|
348 | } |
|
|
349 | |
|
|
350 | =item $handle->autocork ($boolean) |
|
|
351 | |
|
|
352 | Enables or disables the current autocork behaviour (see C<autocork> |
|
|
353 | constructor argument). |
|
|
354 | |
|
|
355 | =cut |
|
|
356 | |
|
|
357 | =item $handle->no_delay ($boolean) |
|
|
358 | |
|
|
359 | Enables or disables the C<no_delay> setting (see constructor argument of |
|
|
360 | the same name for details). |
|
|
361 | |
|
|
362 | =cut |
|
|
363 | |
|
|
364 | sub no_delay { |
|
|
365 | $_[0]{no_delay} = $_[1]; |
|
|
366 | |
|
|
367 | eval { |
|
|
368 | local $SIG{__DIE__}; |
|
|
369 | setsockopt $_[0]{fh}, &Socket::IPPROTO_TCP, &Socket::TCP_NODELAY, int $_[1]; |
|
|
370 | }; |
323 | } |
371 | } |
324 | |
372 | |
325 | ############################################################################# |
373 | ############################################################################# |
326 | |
374 | |
327 | =item $handle->timeout ($seconds) |
375 | =item $handle->timeout ($seconds) |
… | |
… | |
442 | $self->_error ($!, 1); |
490 | $self->_error ($!, 1); |
443 | } |
491 | } |
444 | }; |
492 | }; |
445 | |
493 | |
446 | # try to write data immediately |
494 | # try to write data immediately |
447 | $cb->(); |
495 | $cb->() unless $self->{autocork}; |
448 | |
496 | |
449 | # if still data left in wbuf, we need to poll |
497 | # if still data left in wbuf, we need to poll |
450 | $self->{_ww} = AnyEvent->io (fh => $self->{fh}, poll => "w", cb => $cb) |
498 | $self->{_ww} = AnyEvent->io (fh => $self->{fh}, poll => "w", cb => $cb) |
451 | if length $self->{wbuf}; |
499 | if length $self->{wbuf}; |
452 | }; |
500 | }; |