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.203 by root, Sat Oct 16 03:22:10 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...
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
545 AnyEvent::Util::fh_nonblocking $self->{fh}, 1; 555 AnyEvent::Util::fh_nonblocking $self->{fh}, 1;
546 556
547 $self->{_activity} = 557 $self->{_activity} =
548 $self->{_ractivity} = 558 $self->{_ractivity} =
549 $self->{_wactivity} = AE::now; 559 $self->{_wactivity} = AE::now;
560
561 $self->{read_size} ||= 2048;
562 $self->{max_read_size} = $self->{read_size}
563 if $self->{read_size} > ($self->{max_read_size} || MAX_READ_SIZE);
550 564
551 $self->timeout (delete $self->{timeout} ) if $self->{timeout}; 565 $self->timeout (delete $self->{timeout} ) if $self->{timeout};
552 $self->rtimeout (delete $self->{rtimeout} ) if $self->{rtimeout}; 566 $self->rtimeout (delete $self->{rtimeout} ) if $self->{rtimeout};
553 $self->wtimeout (delete $self->{wtimeout} ) if $self->{wtimeout}; 567 $self->wtimeout (delete $self->{wtimeout} ) if $self->{wtimeout};
554 568
1745 unless ($self->{_rw} || $self->{_eof} || !$self->{fh}) { 1759 unless ($self->{_rw} || $self->{_eof} || !$self->{fh}) {
1746 Scalar::Util::weaken $self; 1760 Scalar::Util::weaken $self;
1747 1761
1748 $self->{_rw} = AE::io $self->{fh}, 0, sub { 1762 $self->{_rw} = AE::io $self->{fh}, 0, sub {
1749 my $rbuf = \($self->{tls} ? my $buf : $self->{rbuf}); 1763 my $rbuf = \($self->{tls} ? my $buf : $self->{rbuf});
1750 my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf; 1764 my $len = sysread $self->{fh}, $$rbuf, $self->{read_size}, length $$rbuf;
1751 1765
1752 if ($len > 0) { 1766 if ($len > 0) {
1753 $self->{_activity} = $self->{_ractivity} = AE::now; 1767 $self->{_activity} = $self->{_ractivity} = AE::now;
1754 1768
1755 if ($self->{tls}) { 1769 if ($self->{tls}) {
1756 Net::SSLeay::BIO_write ($self->{_rbio}, $$rbuf); 1770 Net::SSLeay::BIO_write ($self->{_rbio}, $$rbuf);
1757 1771
1758 &_dotls ($self); 1772 &_dotls ($self);
1759 } else { 1773 } else {
1760 $self->_drain_rbuf; 1774 $self->_drain_rbuf;
1775 }
1776
1777 if ($len == $self->{read_size}) {
1778 $self->{read_size} *= 2;
1779 $self->{read_size} = $self->{max_read_size} || MAX_READ_SIZE
1780 if $self->{read_size} > ($self->{max_read_size} || MAX_READ_SIZE);
1761 } 1781 }
1762 1782
1763 } elsif (defined $len) { 1783 } elsif (defined $len) {
1764 delete $self->{_rw}; 1784 delete $self->{_rw};
1765 $self->{_eof} = 1; 1785 $self->{_eof} = 1;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines