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.80 by root, Sun Jul 27 08:43:32 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 I<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.
87 93
88If an EOF condition has been detected but no C<on_eof> callback has been 94If an EOF condition has been detected but no C<on_eof> callback has been
93This is the error callback, which is called when, well, some error 99This is the error callback, which is called when, well, some error
94occured, such as not being able to resolve the hostname, failure to 100occured, such as not being able to resolve the hostname, failure to
95connect or a read error. 101connect or a read error.
96 102
97Some 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
98fatal 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
99usable. 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
100recommended to simply ignore this parameter and instead abondon the handle 110to simply ignore this parameter and instead abondon the handle object
101object 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>).
102 113
103On callback entrance, the value of C<$!> contains the operating system 114On callback entrance, the value of C<$!> contains the operating system
104error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>). 115error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>).
105 116
106While 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
291 delete $self->{_rw}; 302 delete $self->{_rw};
292 delete $self->{_ww}; 303 delete $self->{_ww};
293 delete $self->{fh}; 304 delete $self->{fh};
294 305
295 $self->stoptls; 306 $self->stoptls;
307
308 delete $self->{on_read};
309 delete $self->{_queue};
296} 310}
297 311
298sub _error { 312sub _error {
299 my ($self, $errno, $fatal) = @_; 313 my ($self, $errno, $fatal) = @_;
300 314
729 743
730 if ( 744 if (
731 defined $self->{rbuf_max} 745 defined $self->{rbuf_max}
732 && $self->{rbuf_max} < length $self->{rbuf} 746 && $self->{rbuf_max} < length $self->{rbuf}
733 ) { 747 ) {
734 return $self->_error (&Errno::ENOSPC, 1); 748 $self->_error (&Errno::ENOSPC, 1), return;
735 } 749 }
736 750
737 while () { 751 while () {
738 my $len = length $self->{rbuf}; 752 my $len = length $self->{rbuf};
739 753
740 if (my $cb = shift @{ $self->{_queue} }) { 754 if (my $cb = shift @{ $self->{_queue} }) {
741 unless ($cb->($self)) { 755 unless ($cb->($self)) {
742 if ($self->{_eof}) { 756 if ($self->{_eof}) {
743 # 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)
744 $self->_error (&Errno::EPIPE, 1), last; 758 $self->_error (&Errno::EPIPE, 1), return;
745 } 759 }
746 760
747 unshift @{ $self->{_queue} }, $cb; 761 unshift @{ $self->{_queue} }, $cb;
748 last; 762 last;
749 } 763 }
757 && !@{ $self->{_queue} } # and the queue is still empty 771 && !@{ $self->{_queue} } # and the queue is still empty
758 && $self->{on_read} # but we still have on_read 772 && $self->{on_read} # but we still have on_read
759 ) { 773 ) {
760 # no further data will arrive 774 # no further data will arrive
761 # so no progress can be made 775 # so no progress can be made
762 $self->_error (&Errno::EPIPE, 1), last 776 $self->_error (&Errno::EPIPE, 1), return
763 if $self->{_eof}; 777 if $self->{_eof};
764 778
765 last; # more data might arrive 779 last; # more data might arrive
766 } 780 }
767 } else { 781 } else {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines