1 | package AnyEvent::Handle; |
1 | package AnyEvent::Handle; |
2 | |
2 | |
3 | no warnings; |
3 | no warnings; |
4 | use strict; |
4 | use strict qw(subs vars); |
5 | |
5 | |
6 | use AnyEvent (); |
6 | use AnyEvent (); |
7 | use AnyEvent::Util qw(WSAEWOULDBLOCK); |
7 | use AnyEvent::Util qw(WSAEWOULDBLOCK); |
8 | use Scalar::Util (); |
8 | use Scalar::Util (); |
9 | use Carp (); |
9 | use Carp (); |
… | |
… | |
79 | |
79 | |
80 | Set the callback to be called when an end-of-file condition is detected, |
80 | Set the callback to be called when an end-of-file condition is detected, |
81 | i.e. in the case of a socket, when the other side has closed the |
81 | i.e. in the case of a socket, when the other side has closed the |
82 | connection cleanly. |
82 | connection cleanly. |
83 | |
83 | |
84 | While not mandatory, it is highly recommended to set an eof callback, |
84 | While not mandatory, it is I<highly> recommended to set an eof callback, |
85 | otherwise you might end up with a closed socket while you are still |
85 | otherwise you might end up with a closed socket while you are still |
86 | waiting for data. |
86 | waiting for data. |
|
|
87 | |
|
|
88 | If an EOF condition has been detected but no C<on_eof> callback has been |
|
|
89 | set, 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 | |
90 | This is the error callback, which is called when, well, some error |
93 | This is the error callback, which is called when, well, some error |
91 | occured, such as not being able to resolve the hostname, failure to |
94 | occured, 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} }; |