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.21 by root, Sat May 24 15:03:42 2008 UTC vs.
Revision 1.22 by root, Sat May 24 15:10:48 2008 UTC

10use Fcntl (); 10use Fcntl ();
11use Errno qw/EAGAIN EINTR/; 11use Errno qw/EAGAIN EINTR/;
12 12
13=head1 NAME 13=head1 NAME
14 14
15AnyEvent::Handle - non-blocking I/O on filehandles via AnyEvent 15AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent
16 16
17This module is experimental. 17This module is experimental.
18 18
19=cut 19=cut
20 20
212 } 212 }
213} 213}
214 214
215=item $fh = $handle->fh 215=item $fh = $handle->fh
216 216
217This method returns the filehandle of the L<AnyEvent::Handle> object. 217This method returns the file handle of the L<AnyEvent::Handle> object.
218 218
219=cut 219=cut
220 220
221sub fh { $_[0]->{fh} } 221sub fh { $_[0]->{fh} }
222 222
602 602
603=item $handle->start_read 603=item $handle->start_read
604 604
605In rare cases you actually do not want to read anything from the 605In rare cases you actually do not want to read anything from the
606socket. In this case you can call C<stop_read>. Neither C<on_read> no 606socket. In this case you can call C<stop_read>. Neither C<on_read> no
607any queued callbacks will be executed then. To start readign again, call 607any queued callbacks will be executed then. To start reading again, call
608C<start_read>. 608C<start_read>.
609 609
610=cut 610=cut
611 611
612sub stop_read { 612sub stop_read {
644 644
645sub _dotls { 645sub _dotls {
646 my ($self) = @_; 646 my ($self) = @_;
647 647
648 if (length $self->{tls_wbuf}) { 648 if (length $self->{tls_wbuf}) {
649 my $len = Net::SSLeay::write ($self->{tls}, $self->{tls_wbuf}); 649 while ((my $len = Net::SSLeay::write ($self->{tls}, $self->{tls_wbuf})) > 0) {
650 substr $self->{tls_wbuf}, 0, $len, "" if $len > 0; 650 substr $self->{tls_wbuf}, 0, $len, "";
651 }
651 } 652 }
652 653
653 if (defined (my $buf = Net::SSLeay::BIO_read ($self->{tls_wbio}))) { 654 if (defined (my $buf = Net::SSLeay::BIO_read ($self->{tls_wbio}))) {
654 $self->{wbuf} .= $buf; 655 $self->{wbuf} .= $buf;
655 $self->_drain_wbuf; 656 $self->_drain_wbuf;
656 } 657 }
657 658
659 while () {
658 if (defined (my $buf = Net::SSLeay::read ($self->{tls}))) { 660 if (defined (my $buf = Net::SSLeay::read ($self->{tls}))) {
659 $self->{rbuf} .= $buf; 661 $self->{rbuf} .= $buf;
660 $self->_drain_rbuf; 662 $self->_drain_rbuf;
661 } elsif ( 663 } elsif (
662 (my $err = Net::SSLeay::get_error ($self->{tls}, -1)) 664 (my $err = Net::SSLeay::get_error ($self->{tls}, -1))
663 != Net::SSLeay::ERROR_WANT_READ () 665 != Net::SSLeay::ERROR_WANT_READ ()
664 ) { 666 ) {
665 if ($err == Net::SSLeay::ERROR_SYSCALL ()) { 667 if ($err == Net::SSLeay::ERROR_SYSCALL ()) {
666 $self->error; 668 $self->error;
667 } elsif ($err == Net::SSLeay::ERROR_SSL ()) { 669 } elsif ($err == Net::SSLeay::ERROR_SSL ()) {
668 $! = &Errno::EIO; 670 $! = &Errno::EIO;
669 $self->error; 671 $self->error;
672 }
673
674 last;
675 # all others are fine for our purposes
676 } else {
677 last;
670 } 678 }
671
672 # all others are fine for our purposes
673 } 679 }
674} 680}
675 681
676# TODO: maybe document... 682# TODO: maybe document...
677sub starttls { 683sub starttls {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines