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} }; |
… | |
… | |
905 | $cb->($_[0], substr $_[0]{rbuf}, 0, $len, ""); |
911 | $cb->($_[0], substr $_[0]{rbuf}, 0, $len, ""); |
906 | 1 |
912 | 1 |
907 | } |
913 | } |
908 | }; |
914 | }; |
909 | |
915 | |
910 | # compatibility with older API |
|
|
911 | sub push_read_chunk { |
|
|
912 | $_[0]->push_read (chunk => $_[1], $_[2]); |
|
|
913 | } |
|
|
914 | |
|
|
915 | sub unshift_read_chunk { |
|
|
916 | $_[0]->unshift_read (chunk => $_[1], $_[2]); |
|
|
917 | } |
|
|
918 | |
|
|
919 | =item line => [$eol, ]$cb->($handle, $line, $eol) |
916 | =item line => [$eol, ]$cb->($handle, $line, $eol) |
920 | |
917 | |
921 | The callback will be called only once a full line (including the end of |
918 | The callback will be called only once a full line (including the end of |
922 | line marker, C<$eol>) has been read. This line (excluding the end of line |
919 | line marker, C<$eol>) has been read. This line (excluding the end of line |
923 | marker) will be passed to the callback as second argument (C<$line>), and |
920 | marker) will be passed to the callback as second argument (C<$line>), and |
… | |
… | |
958 | $cb->($_[0], $1, $2); |
955 | $cb->($_[0], $1, $2); |
959 | 1 |
956 | 1 |
960 | } |
957 | } |
961 | } |
958 | } |
962 | }; |
959 | }; |
963 | |
|
|
964 | # compatibility with older API |
|
|
965 | sub push_read_line { |
|
|
966 | my $self = shift; |
|
|
967 | $self->push_read (line => @_); |
|
|
968 | } |
|
|
969 | |
|
|
970 | sub unshift_read_line { |
|
|
971 | my $self = shift; |
|
|
972 | $self->unshift_read (line => @_); |
|
|
973 | } |
|
|
974 | |
960 | |
975 | =item regex => $accept[, $reject[, $skip], $cb->($handle, $data) |
961 | =item regex => $accept[, $reject[, $skip], $cb->($handle, $data) |
976 | |
962 | |
977 | Makes a regex match against the regex object C<$accept> and returns |
963 | Makes a regex match against the regex object C<$accept> and returns |
978 | everything up to and including the match. |
964 | everything up to and including the match. |