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.78 by root, Sun Jul 27 07:34:07 2008 UTC vs.
Revision 1.80 by root, Sun Jul 27 08:43:32 2008 UTC

1package AnyEvent::Handle; 1package AnyEvent::Handle;
2 2
3no warnings; 3no warnings;
4use strict; 4use strict qw(subs vars);
5 5
6use AnyEvent (); 6use AnyEvent ();
7use AnyEvent::Util qw(WSAEWOULDBLOCK); 7use AnyEvent::Util qw(WSAEWOULDBLOCK);
8use Scalar::Util (); 8use Scalar::Util ();
9use Carp (); 9use Carp ();
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
84While not mandatory, it is highly recommended to set an eof callback, 84While 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 85otherwise you might end up with a closed socket while you are still
86waiting for data. 86waiting for data.
87
88If an EOF condition has been detected but no C<on_eof> callback has been
89set, then a fatal error will be raised with C<$!> set to <0>.
87 90
88=item on_error => $cb->($handle, $fatal) 91=item on_error => $cb->($handle, $fatal)
89 92
90This is the error callback, which is called when, well, some error 93This is the error callback, which is called when, well, some error
91occured, such as not being able to resolve the hostname, failure to 94occured, such as not being able to resolve the hostname, failure to
730 ) { 733 ) {
731 return $self->_error (&Errno::ENOSPC, 1); 734 return $self->_error (&Errno::ENOSPC, 1);
732 } 735 }
733 736
734 while () { 737 while () {
735 no strict 'refs';
736
737 my $len = length $self->{rbuf}; 738 my $len = length $self->{rbuf};
738 739
739 if (my $cb = shift @{ $self->{_queue} }) { 740 if (my $cb = shift @{ $self->{_queue} }) {
740 unless ($cb->($self)) { 741 unless ($cb->($self)) {
741 if ($self->{_eof}) { 742 if ($self->{_eof}) {
768 delete $self->{_rw}; 769 delete $self->{_rw};
769 last; 770 last;
770 } 771 }
771 } 772 }
772 773
774 if ($self->{_eof}) {
775 if ($self->{on_eof}) {
773 $self->{on_eof}($self) 776 $self->{on_eof}($self)
774 if $self->{_eof} && $self->{on_eof}; 777 } else {
778 $self->_error (0, 1);
779 }
780 }
775 781
776 # may need to restart read watcher 782 # may need to restart read watcher
777 unless ($self->{_rw}) { 783 unless ($self->{_rw}) {
778 $self->start_read 784 $self->start_read
779 if $self->{on_read} || @{ $self->{_queue} }; 785 if $self->{on_read} || @{ $self->{_queue} };

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines