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.81 by root, Wed Aug 20 12:37:21 2008 UTC vs.
Revision 1.82 by root, Thu Aug 21 18:45:16 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.231; 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;
79 79
80Set the callback to be called when an end-of-file condition is detected, 80Set 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 81i.e. in the case of a socket, when the other side has closed the
82connection cleanly. 82connection cleanly.
83 83
84For sockets, this just means that the other side has stopped sending data,
85you can still try to write data, and, in fact, one can return from the eof
86callback and continue writing data, as only the read part has been shut
87down.
88
84While not mandatory, it is I<highly> recommended to set an eof callback, 89While 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 90otherwise you might end up with a closed socket while you are still
86waiting for data. 91waiting for data.
87 92
88If an EOF condition has been detected but no C<on_eof> callback has been 93If 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 98This is the error callback, which is called when, well, some error
94occured, such as not being able to resolve the hostname, failure to 99occured, such as not being able to resolve the hostname, failure to
95connect or a read error. 100connect or a read error.
96 101
97Some errors are fatal (which is indicated by C<$fatal> being true). On 102Some 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 103fatal errors the handle object will be shut down and will not be usable
104(but you are free to look at the current C< ->rbuf >). Examples of fatal
105errors are an EOF condition with active (but unsatisifable) read watchers
106(C<EPIPE>) or I/O errors.
107
99usable. Non-fatal errors can be retried by simply returning, but it is 108Non-fatal errors can be retried by simply returning, but it is recommended
100recommended to simply ignore this parameter and instead abondon the handle 109to simply ignore this parameter and instead abondon the handle object
101object when this callback is invoked. 110when this callback is invoked. Examples of non-fatal errors are timeouts
111C<ETIMEDOUT>) or badly-formatted data (C<EBADMSG>).
102 112
103On callback entrance, the value of C<$!> contains the operating system 113On callback entrance, the value of C<$!> contains the operating system
104error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>). 114error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>).
105 115
106While not mandatory, it is I<highly> recommended to set this callback, as 116While not mandatory, it is I<highly> recommended to set this callback, as
291 delete $self->{_rw}; 301 delete $self->{_rw};
292 delete $self->{_ww}; 302 delete $self->{_ww};
293 delete $self->{fh}; 303 delete $self->{fh};
294 304
295 $self->stoptls; 305 $self->stoptls;
306
307 delete $self->{on_read};
308 delete $self->{_queue};
296} 309}
297 310
298sub _error { 311sub _error {
299 my ($self, $errno, $fatal) = @_; 312 my ($self, $errno, $fatal) = @_;
300 313
729 742
730 if ( 743 if (
731 defined $self->{rbuf_max} 744 defined $self->{rbuf_max}
732 && $self->{rbuf_max} < length $self->{rbuf} 745 && $self->{rbuf_max} < length $self->{rbuf}
733 ) { 746 ) {
734 return $self->_error (&Errno::ENOSPC, 1); 747 $self->_error (&Errno::ENOSPC, 1), return;
735 } 748 }
736 749
737 while () { 750 while () {
738 my $len = length $self->{rbuf}; 751 my $len = length $self->{rbuf};
739 752
740 if (my $cb = shift @{ $self->{_queue} }) { 753 if (my $cb = shift @{ $self->{_queue} }) {
741 unless ($cb->($self)) { 754 unless ($cb->($self)) {
742 if ($self->{_eof}) { 755 if ($self->{_eof}) {
743 # no progress can be made (not enough data and no data forthcoming) 756 # no progress can be made (not enough data and no data forthcoming)
744 $self->_error (&Errno::EPIPE, 1), last; 757 $self->_error (&Errno::EPIPE, 1), return;
745 } 758 }
746 759
747 unshift @{ $self->{_queue} }, $cb; 760 unshift @{ $self->{_queue} }, $cb;
748 last; 761 last;
749 } 762 }
757 && !@{ $self->{_queue} } # and the queue is still empty 770 && !@{ $self->{_queue} } # and the queue is still empty
758 && $self->{on_read} # but we still have on_read 771 && $self->{on_read} # but we still have on_read
759 ) { 772 ) {
760 # no further data will arrive 773 # no further data will arrive
761 # so no progress can be made 774 # so no progress can be made
762 $self->_error (&Errno::EPIPE, 1), last 775 $self->_error (&Errno::EPIPE, 1), return
763 if $self->{_eof}; 776 if $self->{_eof};
764 777
765 last; # more data might arrive 778 last; # more data might arrive
766 } 779 }
767 } else { 780 } else {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines