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.228 by root, Mon Feb 6 00:17:26 2012 UTC vs.
Revision 1.233 by root, Thu Apr 5 06:14:10 2012 UTC

11 11
12 my $hdl; $hdl = new AnyEvent::Handle 12 my $hdl; $hdl = new AnyEvent::Handle
13 fh => \*STDIN, 13 fh => \*STDIN,
14 on_error => sub { 14 on_error => sub {
15 my ($hdl, $fatal, $msg) = @_; 15 my ($hdl, $fatal, $msg) = @_;
16 AE::log error => "got error $msg\n"; 16 AE::log error => $msg;
17 $hdl->destroy; 17 $hdl->destroy;
18 $cv->send; 18 $cv->send;
19 }; 19 };
20 20
21 # send some request line 21 # send some request line
170with active (but unsatisfiable) read watchers (C<EPIPE>) or I/O errors. In 170with active (but unsatisfiable) read watchers (C<EPIPE>) or I/O errors. In
171cases where the other side can close the connection at will, it is 171cases where the other side can close the connection at will, it is
172often easiest to not report C<EPIPE> errors in this callback. 172often easiest to not report C<EPIPE> errors in this callback.
173 173
174AnyEvent::Handle tries to find an appropriate error code for you to check 174AnyEvent::Handle tries to find an appropriate error code for you to check
175against, but in some cases (TLS errors), this does not work well. It is 175against, but in some cases (TLS errors), this does not work well.
176recommended to always output the C<$message> argument in human-readable 176
177error messages (it's usually the same as C<"$!">). 177If you report the error to the user, it is recommended to always output
178the C<$message> argument in human-readable error messages (you don't need
179to report C<"$!"> if you report C<$message>).
180
181If you want to react programmatically to the error, then looking at C<$!>
182and comparing it against some of the documented C<Errno> values is usually
183better than looking at the C<$message>.
178 184
179Non-fatal errors can be retried by returning, but it is recommended 185Non-fatal errors can be retried by returning, but it is recommended
180to simply ignore this parameter and instead abondon the handle object 186to simply ignore this parameter and instead abondon the handle object
181when this callback is invoked. Examples of non-fatal errors are timeouts 187when this callback is invoked. Examples of non-fatal errors are timeouts
182C<ETIMEDOUT>) or badly-formatted data (C<EBADMSG>). 188C<ETIMEDOUT>) or badly-formatted data (C<EBADMSG>).
230If an EOF condition has been detected but no C<on_eof> callback has been 236If an EOF condition has been detected but no C<on_eof> callback has been
231set, then a fatal error will be raised with C<$!> set to <0>. 237set, then a fatal error will be raised with C<$!> set to <0>.
232 238
233=item on_drain => $cb->($handle) 239=item on_drain => $cb->($handle)
234 240
235This sets the callback that is called when the write buffer becomes empty 241This sets the callback that is called once when the write buffer becomes
236(or immediately if the buffer is empty already). 242empty (and immediately when the handle object is created).
237 243
238To append to the write buffer, use the C<< ->push_write >> method. 244To append to the write buffer, use the C<< ->push_write >> method.
239 245
240This callback is useful when you don't want to put all of your write data 246This callback is useful when you don't want to put all of your write data
241into the queue at once, for example, when you want to write the contents 247into the queue at once, for example, when you want to write the contents
886 892
887The write queue is very simple: you can add data to its end, and 893The write queue is very simple: you can add data to its end, and
888AnyEvent::Handle will automatically try to get rid of it for you. 894AnyEvent::Handle will automatically try to get rid of it for you.
889 895
890When data could be written and the write buffer is shorter then the low 896When data could be written and the write buffer is shorter then the low
891water mark, the C<on_drain> callback will be invoked. 897water mark, the C<on_drain> callback will be invoked once.
892 898
893=over 4 899=over 4
894 900
895=item $handle->on_drain ($cb) 901=item $handle->on_drain ($cb)
896 902
1730 1736
1731 # bypass unshift if we already have the remaining chunk 1737 # bypass unshift if we already have the remaining chunk
1732 if ($format + $len <= length $_[0]{rbuf}) { 1738 if ($format + $len <= length $_[0]{rbuf}) {
1733 my $data = substr $_[0]{rbuf}, $format, $len; 1739 my $data = substr $_[0]{rbuf}, $format, $len;
1734 substr $_[0]{rbuf}, 0, $format + $len, ""; 1740 substr $_[0]{rbuf}, 0, $format + $len, "";
1741
1735 $cb->($_[0], Storable::thaw ($data)); 1742 eval { $cb->($_[0], Storable::thaw ($data)); 1 }
1743 or return $_[0]->_error (Errno::EBADMSG);
1736 } else { 1744 } else {
1737 # remove prefix 1745 # remove prefix
1738 substr $_[0]{rbuf}, 0, $format, ""; 1746 substr $_[0]{rbuf}, 0, $format, "";
1739 1747
1740 # read remaining chunk 1748 # read remaining chunk
1741 $_[0]->unshift_read (chunk => $len, sub { 1749 $_[0]->unshift_read (chunk => $len, sub {
1742 if (my $ref = eval { Storable::thaw ($_[1]) }) { 1750 eval { $cb->($_[0], Storable::thaw ($_[1])); 1 }
1743 $cb->($_[0], $ref);
1744 } else {
1745 $_[0]->_error (Errno::EBADMSG); 1751 or $_[0]->_error (Errno::EBADMSG);
1746 }
1747 }); 1752 });
1748 } 1753 }
1749 1754
1750 1 1755 1
1751 } 1756 }
1856 my ($self, $err) = @_; 1861 my ($self, $err) = @_;
1857 1862
1858 return $self->_error ($!, 1) 1863 return $self->_error ($!, 1)
1859 if $err == Net::SSLeay::ERROR_SYSCALL (); 1864 if $err == Net::SSLeay::ERROR_SYSCALL ();
1860 1865
1861 my $err =Net::SSLeay::ERR_error_string (Net::SSLeay::ERR_get_error ()); 1866 my $err = Net::SSLeay::ERR_error_string (Net::SSLeay::ERR_get_error ());
1862 1867
1863 # reduce error string to look less scary 1868 # reduce error string to look less scary
1864 $err =~ s/^error:[0-9a-fA-F]{8}:[^:]+:([^:]+):/\L$1: /; 1869 $err =~ s/^error:[0-9a-fA-F]{8}:[^:]+:([^:]+):/\L$1: /;
1865 1870
1866 if ($self->{_on_starttls}) { 1871 if ($self->{_on_starttls}) {
2336C<low_water_mark> this will be called precisely when all data has been 2341C<low_water_mark> this will be called precisely when all data has been
2337written to the socket: 2342written to the socket:
2338 2343
2339 $handle->push_write (...); 2344 $handle->push_write (...);
2340 $handle->on_drain (sub { 2345 $handle->on_drain (sub {
2341 AE::log debug => "all data submitted to the kernel\n"; 2346 AE::log debug => "All data submitted to the kernel.";
2342 undef $handle; 2347 undef $handle;
2343 }); 2348 });
2344 2349
2345If you just want to queue some data and then signal EOF to the other side, 2350If you just want to queue some data and then signal EOF to the other side,
2346consider using C<< ->push_shutdown >> instead. 2351consider using C<< ->push_shutdown >> instead.
2430When you have intermediate CA certificates that your clients might not 2435When you have intermediate CA certificates that your clients might not
2431know about, just append them to the C<cert_file>. 2436know about, just append them to the C<cert_file>.
2432 2437
2433=back 2438=back
2434 2439
2435
2436=head1 SUBCLASSING AnyEvent::Handle 2440=head1 SUBCLASSING AnyEvent::Handle
2437 2441
2438In many cases, you might want to subclass AnyEvent::Handle. 2442In many cases, you might want to subclass AnyEvent::Handle.
2439 2443
2440To make this easier, a given version of AnyEvent::Handle uses these 2444To make this easier, a given version of AnyEvent::Handle uses these
2466 2470
2467Robin Redeker C<< <elmex at ta-sa.org> >>, Marc Lehmann <schmorp@schmorp.de>. 2471Robin Redeker C<< <elmex at ta-sa.org> >>, Marc Lehmann <schmorp@schmorp.de>.
2468 2472
2469=cut 2473=cut
2470 2474
24711; # End of AnyEvent::Handle 24751
2476

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines