ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Handle.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/Handle.pm (file contents):
Revision 1.202 by root, Sat Oct 16 02:01:54 2010 UTC vs.
Revision 1.206 by root, Mon Nov 15 19:49:31 2010 UTC

75 } 75 }
76 76
77 \&$func 77 \&$func
78} 78}
79 79
80sub MAX_READ_SIZE() { 131072 }
81
80=head1 METHODS 82=head1 METHODS
81 83
82=over 4 84=over 4
83 85
84=item $handle = B<new> AnyEvent::Handle fh => $filehandle, key => value... 86=item $handle = B<new> AnyEvent::Handle fh => $filehandle, key => value...
157 159
158Some errors are fatal (which is indicated by C<$fatal> being true). On 160Some errors are fatal (which is indicated by C<$fatal> being true). On
159fatal errors the handle object will be destroyed (by a call to C<< -> 161fatal errors the handle object will be destroyed (by a call to C<< ->
160destroy >>) after invoking the error callback (which means you are free to 162destroy >>) after invoking the error callback (which means you are free to
161examine the handle object). Examples of fatal errors are an EOF condition 163examine the handle object). Examples of fatal errors are an EOF condition
162with active (but unsatisifable) read watchers (C<EPIPE>) or I/O errors. In 164with active (but unsatisfiable) read watchers (C<EPIPE>) or I/O errors. In
163cases where the other side can close the connection at will, it is 165cases where the other side can close the connection at will, it is
164often easiest to not report C<EPIPE> errors in this callback. 166often easiest to not report C<EPIPE> errors in this callback.
165 167
166AnyEvent::Handle tries to find an appropriate error code for you to check 168AnyEvent::Handle tries to find an appropriate error code for you to check
167against, but in some cases (TLS errors), this does not work well. It is 169against, but in some cases (TLS errors), this does not work well. It is
337already have occured on BSD systems), but at least it will protect you 339already have occured on BSD systems), but at least it will protect you
338from most attacks. 340from most attacks.
339 341
340=item read_size => <bytes> 342=item read_size => <bytes>
341 343
342The default read block size (the number of bytes this module will 344The initial read block size, the number of bytes this module will try to
343try to read during each loop iteration, which affects memory 345read during each loop iteration. Each handle object will consume at least
344requirements). Default: C<8192>. 346this amount of memory for the read buffer as well, so when handling many
347connections requirements). See also C<max_read_size>. Default: C<2048>.
348
349=item max_read_size => <bytes>
350
351The maximum read buffer size used by the dynamic adjustment
352algorithm: Each time AnyEvent::Handle can read C<read_size> bytes in
353one go it will double C<read_size> up to the maximum given by this
354option. Default: C<131072> or C<read_size>, whichever is higher.
345 355
346=item low_water_mark => <bytes> 356=item low_water_mark => <bytes>
347 357
348Sets the number of bytes (default: C<0>) that make up an "empty" write 358Sets the number of bytes (default: C<0>) that make up an "empty" write
349buffer: If the buffer reaches this size or gets even samller it is 359buffer: If the buffer reaches this size or gets even samller it is
491 AnyEvent::Socket::tcp_connect ( 501 AnyEvent::Socket::tcp_connect (
492 $self->{connect}[0], 502 $self->{connect}[0],
493 $self->{connect}[1], 503 $self->{connect}[1],
494 sub { 504 sub {
495 my ($fh, $host, $port, $retry) = @_; 505 my ($fh, $host, $port, $retry) = @_;
506
507 delete $self->{_connect}; # no longer needed
496 508
497 if ($fh) { 509 if ($fh) {
498 $self->{fh} = $fh; 510 $self->{fh} = $fh;
499 511
500 delete $self->{_skip_drain_rbuf}; 512 delete $self->{_skip_drain_rbuf};
545 AnyEvent::Util::fh_nonblocking $self->{fh}, 1; 557 AnyEvent::Util::fh_nonblocking $self->{fh}, 1;
546 558
547 $self->{_activity} = 559 $self->{_activity} =
548 $self->{_ractivity} = 560 $self->{_ractivity} =
549 $self->{_wactivity} = AE::now; 561 $self->{_wactivity} = AE::now;
562
563 $self->{read_size} ||= 2048;
564 $self->{max_read_size} = $self->{read_size}
565 if $self->{read_size} > ($self->{max_read_size} || MAX_READ_SIZE);
550 566
551 $self->timeout (delete $self->{timeout} ) if $self->{timeout}; 567 $self->timeout (delete $self->{timeout} ) if $self->{timeout};
552 $self->rtimeout (delete $self->{rtimeout} ) if $self->{rtimeout}; 568 $self->rtimeout (delete $self->{rtimeout} ) if $self->{rtimeout};
553 $self->wtimeout (delete $self->{wtimeout} ) if $self->{wtimeout}; 569 $self->wtimeout (delete $self->{wtimeout} ) if $self->{wtimeout};
554 570
1745 unless ($self->{_rw} || $self->{_eof} || !$self->{fh}) { 1761 unless ($self->{_rw} || $self->{_eof} || !$self->{fh}) {
1746 Scalar::Util::weaken $self; 1762 Scalar::Util::weaken $self;
1747 1763
1748 $self->{_rw} = AE::io $self->{fh}, 0, sub { 1764 $self->{_rw} = AE::io $self->{fh}, 0, sub {
1749 my $rbuf = \($self->{tls} ? my $buf : $self->{rbuf}); 1765 my $rbuf = \($self->{tls} ? my $buf : $self->{rbuf});
1750 my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf; 1766 my $len = sysread $self->{fh}, $$rbuf, $self->{read_size}, length $$rbuf;
1751 1767
1752 if ($len > 0) { 1768 if ($len > 0) {
1753 $self->{_activity} = $self->{_ractivity} = AE::now; 1769 $self->{_activity} = $self->{_ractivity} = AE::now;
1754 1770
1755 if ($self->{tls}) { 1771 if ($self->{tls}) {
1756 Net::SSLeay::BIO_write ($self->{_rbio}, $$rbuf); 1772 Net::SSLeay::BIO_write ($self->{_rbio}, $$rbuf);
1757 1773
1758 &_dotls ($self); 1774 &_dotls ($self);
1759 } else { 1775 } else {
1760 $self->_drain_rbuf; 1776 $self->_drain_rbuf;
1777 }
1778
1779 if ($len == $self->{read_size}) {
1780 $self->{read_size} *= 2;
1781 $self->{read_size} = $self->{max_read_size} || MAX_READ_SIZE
1782 if $self->{read_size} > ($self->{max_read_size} || MAX_READ_SIZE);
1761 } 1783 }
1762 1784
1763 } elsif (defined $len) { 1785 } elsif (defined $len) {
1764 delete $self->{_rw}; 1786 delete $self->{_rw};
1765 $self->{_eof} = 1; 1787 $self->{_eof} = 1;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines