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.79 by root, Sun Jul 27 08:37:56 2008 UTC vs.
Revision 1.83 by root, Thu Aug 21 19:11:37 2008 UTC

14 14
15AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent 15AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent
16 16
17=cut 17=cut
18 18
19our $VERSION = 4.22; 19our $VERSION = 4.232;
20 20
21=head1 SYNOPSIS 21=head1 SYNOPSIS
22 22
23 use AnyEvent; 23 use AnyEvent;
24 use AnyEvent::Handle; 24 use AnyEvent::Handle;
70 70
71=item fh => $filehandle [MANDATORY] 71=item fh => $filehandle [MANDATORY]
72 72
73The filehandle this L<AnyEvent::Handle> object will operate on. 73The filehandle this L<AnyEvent::Handle> object will operate on.
74 74
75NOTE: The filehandle will be set to non-blocking (using 75NOTE: The filehandle will be set to non-blocking mode (using
76AnyEvent::Util::fh_nonblocking). 76C<AnyEvent::Util::fh_nonblocking>) by the constructor and needs to stay in
77that mode.
77 78
78=item on_eof => $cb->($handle) 79=item on_eof => $cb->($handle)
79 80
80Set the callback to be called when an end-of-file condition is detected, 81Set the callback to be called when an end-of-file condition is detected,
81i.e. in the case of a socket, when the other side has closed the 82i.e. in the case of a socket, when the other side has closed the
82connection cleanly. 83connection cleanly.
83 84
85For sockets, this just means that the other side has stopped sending data,
86you can still try to write data, and, in fact, one can return from the eof
87callback and continue writing data, as only the read part has been shut
88down.
89
84While not mandatory, it is highly recommended to set an eof callback, 90While not mandatory, it is I<highly> recommended to set an eof callback,
85otherwise you might end up with a closed socket while you are still 91otherwise you might end up with a closed socket while you are still
86waiting for data. 92waiting for data.
93
94If an EOF condition has been detected but no C<on_eof> callback has been
95set, then a fatal error will be raised with C<$!> set to <0>.
87 96
88=item on_error => $cb->($handle, $fatal) 97=item on_error => $cb->($handle, $fatal)
89 98
90This is the error callback, which is called when, well, some error 99This is the error callback, which is called when, well, some error
91occured, such as not being able to resolve the hostname, failure to 100occured, such as not being able to resolve the hostname, failure to
92connect or a read error. 101connect or a read error.
93 102
94Some errors are fatal (which is indicated by C<$fatal> being true). On 103Some errors are fatal (which is indicated by C<$fatal> being true). On
95fatal errors the handle object will be shut down and will not be 104fatal errors the handle object will be shut down and will not be usable
105(but you are free to look at the current C< ->rbuf >). Examples of fatal
106errors are an EOF condition with active (but unsatisifable) read watchers
107(C<EPIPE>) or I/O errors.
108
96usable. Non-fatal errors can be retried by simply returning, but it is 109Non-fatal errors can be retried by simply returning, but it is recommended
97recommended to simply ignore this parameter and instead abondon the handle 110to simply ignore this parameter and instead abondon the handle object
98object when this callback is invoked. 111when this callback is invoked. Examples of non-fatal errors are timeouts
112C<ETIMEDOUT>) or badly-formatted data (C<EBADMSG>).
99 113
100On callback entrance, the value of C<$!> contains the operating system 114On callback entrance, the value of C<$!> contains the operating system
101error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>). 115error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>).
102 116
103While not mandatory, it is I<highly> recommended to set this callback, as 117While not mandatory, it is I<highly> recommended to set this callback, as
288 delete $self->{_rw}; 302 delete $self->{_rw};
289 delete $self->{_ww}; 303 delete $self->{_ww};
290 delete $self->{fh}; 304 delete $self->{fh};
291 305
292 $self->stoptls; 306 $self->stoptls;
307
308 delete $self->{on_read};
309 delete $self->{_queue};
293} 310}
294 311
295sub _error { 312sub _error {
296 my ($self, $errno, $fatal) = @_; 313 my ($self, $errno, $fatal) = @_;
297 314
726 743
727 if ( 744 if (
728 defined $self->{rbuf_max} 745 defined $self->{rbuf_max}
729 && $self->{rbuf_max} < length $self->{rbuf} 746 && $self->{rbuf_max} < length $self->{rbuf}
730 ) { 747 ) {
731 return $self->_error (&Errno::ENOSPC, 1); 748 $self->_error (&Errno::ENOSPC, 1), return;
732 } 749 }
733 750
734 while () { 751 while () {
735 my $len = length $self->{rbuf}; 752 my $len = length $self->{rbuf};
736 753
737 if (my $cb = shift @{ $self->{_queue} }) { 754 if (my $cb = shift @{ $self->{_queue} }) {
738 unless ($cb->($self)) { 755 unless ($cb->($self)) {
739 if ($self->{_eof}) { 756 if ($self->{_eof}) {
740 # no progress can be made (not enough data and no data forthcoming) 757 # no progress can be made (not enough data and no data forthcoming)
741 $self->_error (&Errno::EPIPE, 1), last; 758 $self->_error (&Errno::EPIPE, 1), return;
742 } 759 }
743 760
744 unshift @{ $self->{_queue} }, $cb; 761 unshift @{ $self->{_queue} }, $cb;
745 last; 762 last;
746 } 763 }
754 && !@{ $self->{_queue} } # and the queue is still empty 771 && !@{ $self->{_queue} } # and the queue is still empty
755 && $self->{on_read} # but we still have on_read 772 && $self->{on_read} # but we still have on_read
756 ) { 773 ) {
757 # no further data will arrive 774 # no further data will arrive
758 # so no progress can be made 775 # so no progress can be made
759 $self->_error (&Errno::EPIPE, 1), last 776 $self->_error (&Errno::EPIPE, 1), return
760 if $self->{_eof}; 777 if $self->{_eof};
761 778
762 last; # more data might arrive 779 last; # more data might arrive
763 } 780 }
764 } else { 781 } else {
766 delete $self->{_rw}; 783 delete $self->{_rw};
767 last; 784 last;
768 } 785 }
769 } 786 }
770 787
788 if ($self->{_eof}) {
789 if ($self->{on_eof}) {
771 $self->{on_eof}($self) 790 $self->{on_eof}($self)
772 if $self->{_eof} && $self->{on_eof}; 791 } else {
792 $self->_error (0, 1);
793 }
794 }
773 795
774 # may need to restart read watcher 796 # may need to restart read watcher
775 unless ($self->{_rw}) { 797 unless ($self->{_rw}) {
776 $self->start_read 798 $self->start_read
777 if $self->{on_read} || @{ $self->{_queue} }; 799 if $self->{on_read} || @{ $self->{_queue} };

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines