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.214 by root, Sun Jan 16 17:12:27 2011 UTC vs.
Revision 1.219 by root, Mon Jul 18 01:19:43 2011 UTC

247many seconds pass without a successful read or write on the underlying 247many seconds pass without a successful read or write on the underlying
248file handle (or a call to C<timeout_reset>), the C<on_timeout> callback 248file handle (or a call to C<timeout_reset>), the C<on_timeout> callback
249will be invoked (and if that one is missing, a non-fatal C<ETIMEDOUT> 249will be invoked (and if that one is missing, a non-fatal C<ETIMEDOUT>
250error will be raised). 250error will be raised).
251 251
252There are three variants of the timeouts that work independently 252There are three variants of the timeouts that work independently of each
253of each other, for both read and write, just read, and just write: 253other, for both read and write (triggered when nothing was read I<OR>
254written), just read (triggered when nothing was read), and just write:
254C<timeout>, C<rtimeout> and C<wtimeout>, with corresponding callbacks 255C<timeout>, C<rtimeout> and C<wtimeout>, with corresponding callbacks
255C<on_timeout>, C<on_rtimeout> and C<on_wtimeout>, and reset functions 256C<on_timeout>, C<on_rtimeout> and C<on_wtimeout>, and reset functions
256C<timeout_reset>, C<rtimeout_reset>, and C<wtimeout_reset>. 257C<timeout_reset>, C<rtimeout_reset>, and C<wtimeout_reset>.
257 258
258Note that timeout processing is active even when you do not have 259Note that timeout processing is active even when you do not have any
259any outstanding read or write requests: If you plan to keep the connection 260outstanding read or write requests: If you plan to keep the connection
260idle then you should disable the timeout temporarily or ignore the timeout 261idle then you should disable the timeout temporarily or ignore the
261in the C<on_timeout> callback, in which case AnyEvent::Handle will simply 262timeout in the corresponding C<on_timeout> callback, in which case
262restart the timeout. 263AnyEvent::Handle will simply restart the timeout.
263 264
264Zero (the default) disables this timeout. 265Zero (the default) disables the corresponding timeout.
265 266
266=item on_timeout => $cb->($handle) 267=item on_timeout => $cb->($handle)
268
269=item on_rtimeout => $cb->($handle)
270
271=item on_wtimeout => $cb->($handle)
267 272
268Called whenever the inactivity timeout passes. If you return from this 273Called whenever the inactivity timeout passes. If you return from this
269callback, then the timeout will be reset as if some activity had happened, 274callback, then the timeout will be reset as if some activity had happened,
270so this condition is not fatal in any way. 275so this condition is not fatal in any way.
271 276
536 }); 541 });
537 542
538 } else { 543 } else {
539 if ($self->{on_connect_error}) { 544 if ($self->{on_connect_error}) {
540 $self->{on_connect_error}($self, "$!"); 545 $self->{on_connect_error}($self, "$!");
541 $self->destroy; 546 $self->destroy if $self;
542 } else { 547 } else {
543 $self->_error ($!, 1); 548 $self->_error ($!, 1);
544 } 549 }
545 } 550 }
546 }, 551 },
765 770
766sub rbuf_max { 771sub rbuf_max {
767 $_[0]{rbuf_max} = $_[1]; 772 $_[0]{rbuf_max} = $_[1];
768} 773}
769 774
770sub rbuf_max { 775sub wbuf_max {
771 $_[0]{wbuf_max} = $_[1]; 776 $_[0]{wbuf_max} = $_[1];
772} 777}
773 778
774############################################################################# 779#############################################################################
775 780
778=item $handle->rtimeout ($seconds) 783=item $handle->rtimeout ($seconds)
779 784
780=item $handle->wtimeout ($seconds) 785=item $handle->wtimeout ($seconds)
781 786
782Configures (or disables) the inactivity timeout. 787Configures (or disables) the inactivity timeout.
788
789The timeout will be checked instantly, so this method might destroy the
790handle before it returns.
783 791
784=item $handle->timeout_reset 792=item $handle->timeout_reset
785 793
786=item $handle->rtimeout_reset 794=item $handle->rtimeout_reset
787 795
2002 Net::SSLeay::CTX_set_mode ($tls, 1|2); 2010 Net::SSLeay::CTX_set_mode ($tls, 1|2);
2003 2011
2004 $self->{_rbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ()); 2012 $self->{_rbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ());
2005 $self->{_wbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ()); 2013 $self->{_wbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ());
2006 2014
2007 Net::SSLeay::BIO_write ($self->{_rbio}, delete $self->{rbuf}); 2015 Net::SSLeay::BIO_write ($self->{_rbio}, $self->{rbuf});
2016 $self->{rbuf} = "";
2008 2017
2009 Net::SSLeay::set_bio ($tls, $self->{_rbio}, $self->{_wbio}); 2018 Net::SSLeay::set_bio ($tls, $self->{_rbio}, $self->{_wbio});
2010 2019
2011 $self->{_on_starttls} = sub { $_[0]{on_starttls}(@_) } 2020 $self->{_on_starttls} = sub { $_[0]{on_starttls}(@_) }
2012 if $self->{on_starttls}; 2021 if $self->{on_starttls};
2049 $self->{tls_ctx}->_put_session (delete $self->{tls}) 2058 $self->{tls_ctx}->_put_session (delete $self->{tls})
2050 if $self->{tls} > 0; 2059 if $self->{tls} > 0;
2051 2060
2052 delete @$self{qw(_rbio _wbio _tls_wbuf _on_starttls)}; 2061 delete @$self{qw(_rbio _wbio _tls_wbuf _on_starttls)};
2053} 2062}
2063
2064=item $handle->resettls
2065
2066This rarely-used method simply resets and TLS state on the handle, usually
2067causing data loss.
2068
2069One case where it may be useful is when you want to skip over the data in
2070the stream but you are not interested in interpreting it, so data loss is
2071no concern.
2072
2073=cut
2074
2075*resettls = \&_freetls;
2054 2076
2055sub DESTROY { 2077sub DESTROY {
2056 my ($self) = @_; 2078 my ($self) = @_;
2057 2079
2058 &_freetls; 2080 &_freetls;
2284 $handle->on_eof (undef); 2306 $handle->on_eof (undef);
2285 $handle->on_error (sub { 2307 $handle->on_error (sub {
2286 my $data = delete $_[0]{rbuf}; 2308 my $data = delete $_[0]{rbuf};
2287 }); 2309 });
2288 2310
2311Note that this example removes the C<rbuf> member from the handle object,
2312which is not normally allowed by the API. It is expressly permitted in
2313this case only, as the handle object needs to be destroyed afterwards.
2314
2289The reason to use C<on_error> is that TCP connections, due to latencies 2315The reason to use C<on_error> is that TCP connections, due to latencies
2290and packets loss, might get closed quite violently with an error, when in 2316and packets loss, might get closed quite violently with an error, when in
2291fact all data has been received. 2317fact all data has been received.
2292 2318
2293It is usually better to use acknowledgements when transferring data, 2319It is usually better to use acknowledgements when transferring data,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines