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.188 by root, Thu Sep 17 08:20:14 2009 UTC vs.
Revision 1.195 by root, Sat Jun 5 09:08:14 2010 UTC

1=head1 NAME 1=head1 NAME
2 2
3AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent 3AnyEvent::Handle - non-blocking I/O on streaming handles via AnyEvent
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use AnyEvent; 7 use AnyEvent;
8 use AnyEvent::Handle; 8 use AnyEvent::Handle;
31 $cv->recv; 31 $cv->recv;
32 32
33=head1 DESCRIPTION 33=head1 DESCRIPTION
34 34
35This module is a helper module to make it easier to do event-based I/O on 35This module is a helper module to make it easier to do event-based I/O on
36filehandles. 36stream-based filehandles (sockets, pipes or other stream things).
37 37
38The L<AnyEvent::Intro> tutorial contains some well-documented 38The L<AnyEvent::Intro> tutorial contains some well-documented
39AnyEvent::Handle examples. 39AnyEvent::Handle examples.
40 40
41In the following, when the documentation refers to of "bytes" then this 41In the following, when the documentation refers to of "bytes" then this
79 79
80=head1 METHODS 80=head1 METHODS
81 81
82=over 4 82=over 4
83 83
84=item $handle = B<new> AnyEvent::TLS fh => $filehandle, key => value... 84=item $handle = B<new> AnyEvent::Handle fh => $filehandle, key => value...
85 85
86The constructor supports these arguments (all as C<< key => value >> pairs). 86The constructor supports these arguments (all as C<< key => value >> pairs).
87 87
88=over 4 88=over 4
89 89
532} 532}
533 533
534sub _start { 534sub _start {
535 my ($self) = @_; 535 my ($self) = @_;
536 536
537 # too many clueless people try to use udp and similar sockets
538 # with AnyEvent::Handle, do them a favour.
539 my $type = getsockopt $self->{fh}, Socket::SOL_SOCKET (), Socket::SO_TYPE ();
540 Carp::croak "AnyEvent::Handle: only stream sockets supported, anything else will NOT work!"
541 if Socket::SOCK_STREAM != (unpack "I", $type) && defined $type;
542
537 AnyEvent::Util::fh_nonblocking $self->{fh}, 1; 543 AnyEvent::Util::fh_nonblocking $self->{fh}, 1;
538 544
539 $self->{_activity} = 545 $self->{_activity} =
540 $self->{_ractivity} = 546 $self->{_ractivity} =
541 $self->{_wactivity} = AE::now; 547 $self->{_wactivity} = AE::now;
710 716
711Replace the current C<on_stoptls> callback (see the C<on_stoptls> constructor argument). 717Replace the current C<on_stoptls> callback (see the C<on_stoptls> constructor argument).
712 718
713=cut 719=cut
714 720
715sub on_starttls { 721sub on_stoptls {
716 $_[0]{on_stoptls} = $_[1]; 722 $_[0]{on_stoptls} = $_[1];
717} 723}
718 724
719=item $handle->rbuf_max ($max_octets) 725=item $handle->rbuf_max ($max_octets)
720 726
832=item $handle->on_drain ($cb) 838=item $handle->on_drain ($cb)
833 839
834Sets the C<on_drain> callback or clears it (see the description of 840Sets the C<on_drain> callback or clears it (see the description of
835C<on_drain> in the constructor). 841C<on_drain> in the constructor).
836 842
843This method may invoke callbacks (and therefore the handle might be
844destroyed after it returns).
845
837=cut 846=cut
838 847
839sub on_drain { 848sub on_drain {
840 my ($self, $cb) = @_; 849 my ($self, $cb) = @_;
841 850
848=item $handle->push_write ($data) 857=item $handle->push_write ($data)
849 858
850Queues the given scalar to be written. You can push as much data as you 859Queues the given scalar to be written. You can push as much data as you
851want (only limited by the available memory), as C<AnyEvent::Handle> 860want (only limited by the available memory), as C<AnyEvent::Handle>
852buffers it independently of the kernel. 861buffers it independently of the kernel.
862
863This method may invoke callbacks (and therefore the handle might be
864destroyed after it returns).
853 865
854=cut 866=cut
855 867
856sub _drain_wbuf { 868sub _drain_wbuf {
857 my ($self) = @_; 869 my ($self) = @_;
903 @_ = ($WH{$type} ||= _load_func "$type\::anyevent_write_type" 915 @_ = ($WH{$type} ||= _load_func "$type\::anyevent_write_type"
904 or Carp::croak "unsupported/unloadable type '$type' passed to AnyEvent::Handle::push_write") 916 or Carp::croak "unsupported/unloadable type '$type' passed to AnyEvent::Handle::push_write")
905 ->($self, @_); 917 ->($self, @_);
906 } 918 }
907 919
920 # we downgrade here to avoid hard-to-track-down bugs,
921 # and diagnose the problem earlier and better.
922
908 if ($self->{tls}) { 923 if ($self->{tls}) {
909 $self->{_tls_wbuf} .= $_[0]; 924 utf8::downgrade $self->{_tls_wbuf} .= $_[0];
910 &_dotls ($self) if $self->{fh}; 925 &_dotls ($self) if $self->{fh};
911 } else { 926 } else {
912 $self->{wbuf} .= $_[0]; 927 utf8::downgrade $self->{wbuf} .= $_[0];
913 $self->_drain_wbuf if $self->{fh}; 928 $self->_drain_wbuf if $self->{fh};
914 } 929 }
915} 930}
916 931
917=item $handle->push_write (type => @args) 932=item $handle->push_write (type => @args)
1030This simply shuts down the write side and signals an EOF condition to the 1045This simply shuts down the write side and signals an EOF condition to the
1031the peer. 1046the peer.
1032 1047
1033You can rely on the normal read queue and C<on_eof> handling 1048You can rely on the normal read queue and C<on_eof> handling
1034afterwards. This is the cleanest way to close a connection. 1049afterwards. This is the cleanest way to close a connection.
1050
1051This method may invoke callbacks (and therefore the handle might be
1052destroyed after it returns).
1035 1053
1036=cut 1054=cut
1037 1055
1038sub push_shutdown { 1056sub push_shutdown {
1039 my ($self) = @_; 1057 my ($self) = @_;
1236 1254
1237This replaces the currently set C<on_read> callback, or clears it (when 1255This replaces the currently set C<on_read> callback, or clears it (when
1238the new callback is C<undef>). See the description of C<on_read> in the 1256the new callback is C<undef>). See the description of C<on_read> in the
1239constructor. 1257constructor.
1240 1258
1259This method may invoke callbacks (and therefore the handle might be
1260destroyed after it returns).
1261
1241=cut 1262=cut
1242 1263
1243sub on_read { 1264sub on_read {
1244 my ($self, $cb) = @_; 1265 my ($self, $cb) = @_;
1245 1266
1283available (or an error condition is detected). 1304available (or an error condition is detected).
1284 1305
1285If enough data was available, then the callback must remove all data it is 1306If enough data was available, then the callback must remove all data it is
1286interested in (which can be none at all) and return a true value. After returning 1307interested in (which can be none at all) and return a true value. After returning
1287true, it will be removed from the queue. 1308true, it will be removed from the queue.
1309
1310These methods may invoke callbacks (and therefore the handle might be
1311destroyed after it returns).
1288 1312
1289=cut 1313=cut
1290 1314
1291our %RH; 1315our %RH;
1292 1316
1711} 1735}
1712 1736
1713sub start_read { 1737sub start_read {
1714 my ($self) = @_; 1738 my ($self) = @_;
1715 1739
1716 unless ($self->{_rw} || $self->{_eof}) { 1740 unless ($self->{_rw} || $self->{_eof} || !$self->{fh}) {
1717 Scalar::Util::weaken $self; 1741 Scalar::Util::weaken $self;
1718 1742
1719 $self->{_rw} = AE::io $self->{fh}, 0, sub { 1743 $self->{_rw} = AE::io $self->{fh}, 0, sub {
1720 my $rbuf = \($self->{tls} ? my $buf : $self->{rbuf}); 1744 my $rbuf = \($self->{tls} ? my $buf : $self->{rbuf});
1721 my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf; 1745 my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf;
1814 && ($tmp != $ERROR_SYSCALL || $!); 1838 && ($tmp != $ERROR_SYSCALL || $!);
1815 1839
1816 while (length ($tmp = Net::SSLeay::BIO_read ($self->{_wbio}))) { 1840 while (length ($tmp = Net::SSLeay::BIO_read ($self->{_wbio}))) {
1817 $self->{wbuf} .= $tmp; 1841 $self->{wbuf} .= $tmp;
1818 $self->_drain_wbuf; 1842 $self->_drain_wbuf;
1843 $self->{tls} or return; # tls session might have gone away in callback
1819 } 1844 }
1820 1845
1821 $self->{_on_starttls} 1846 $self->{_on_starttls}
1822 and Net::SSLeay::state ($self->{tls}) == Net::SSLeay::ST_OK () 1847 and Net::SSLeay::state ($self->{tls}) == Net::SSLeay::ST_OK ()
1823 and (delete $self->{_on_starttls})->($self, 1, "TLS/SSL connection established"); 1848 and (delete $self->{_on_starttls})->($self, 1, "TLS/SSL connection established");
1847when this function returns. 1872when this function returns.
1848 1873
1849Due to bugs in OpenSSL, it might or might not be possible to do multiple 1874Due to bugs in OpenSSL, it might or might not be possible to do multiple
1850handshakes on the same stream. Best do not attempt to use the stream after 1875handshakes on the same stream. Best do not attempt to use the stream after
1851stopping TLS. 1876stopping TLS.
1877
1878This method may invoke callbacks (and therefore the handle might be
1879destroyed after it returns).
1852 1880
1853=cut 1881=cut
1854 1882
1855our %TLS_CACHE; #TODO not yet documented, should we? 1883our %TLS_CACHE; #TODO not yet documented, should we?
1856 1884
1922 1950
1923=item $handle->stoptls 1951=item $handle->stoptls
1924 1952
1925Shuts down the SSL connection - this makes a proper EOF handshake by 1953Shuts down the SSL connection - this makes a proper EOF handshake by
1926sending a close notify to the other side, but since OpenSSL doesn't 1954sending a close notify to the other side, but since OpenSSL doesn't
1927support non-blocking shut downs, it is not guarenteed that you can re-use 1955support non-blocking shut downs, it is not guaranteed that you can re-use
1928the stream afterwards. 1956the stream afterwards.
1957
1958This method may invoke callbacks (and therefore the handle might be
1959destroyed after it returns).
1929 1960
1930=cut 1961=cut
1931 1962
1932sub stoptls { 1963sub stoptls {
1933 my ($self) = @_; 1964 my ($self) = @_;
1934 1965
1935 if ($self->{tls}) { 1966 if ($self->{tls} && $self->{fh}) {
1936 Net::SSLeay::shutdown ($self->{tls}); 1967 Net::SSLeay::shutdown ($self->{tls});
1937 1968
1938 &_dotls; 1969 &_dotls;
1939 1970
1940# # we don't give a shit. no, we do, but we can't. no...#d# 1971# # we don't give a shit. no, we do, but we can't. no...#d#
2017 2048
2018sub AnyEvent::Handle::destroyed::AUTOLOAD { 2049sub AnyEvent::Handle::destroyed::AUTOLOAD {
2019 #nop 2050 #nop
2020} 2051}
2021 2052
2053=item $handle->destroyed
2054
2055Returns false as long as the handle hasn't been destroyed by a call to C<<
2056->destroy >>, true otherwise.
2057
2058Can be useful to decide whether the handle is still valid after some
2059callback possibly destroyed the handle. For example, C<< ->push_write >>,
2060C<< ->starttls >> and other methods can call user callbacks, which in turn
2061can destroy the handle, so work can be avoided by checking sometimes:
2062
2063 $hdl->starttls ("accept");
2064 return if $hdl->destroyed;
2065 $hdl->push_write (...
2066
2067Note that the call to C<push_write> will silently be ignored if the handle
2068has been destroyed, so often you can just ignore the possibility of the
2069handle being destroyed.
2070
2071=cut
2072
2073sub destroyed { 0 }
2074sub AnyEvent::Handle::destroyed::destroyed { 1 }
2075
2022=item AnyEvent::Handle::TLS_CTX 2076=item AnyEvent::Handle::TLS_CTX
2023 2077
2024This function creates and returns the AnyEvent::TLS object used by default 2078This function creates and returns the AnyEvent::TLS object used by default
2025for TLS mode. 2079for TLS mode.
2026 2080

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines