sub _dotls { my ($self) = @_; if (length $self->{_tls_wbuf}) { while ((my $len = Net::SSLeay::write ($self->{tls}, $self->{_tls_wbuf})) > 0) { substr $self->{_tls_wbuf}, 0, $len, ""; } } if (defined (my $buf = Net::SSLeay::BIO_read ($self->{_wbio}))) { $self->{wbuf} .= $buf; $self->_drain_wbuf; } while (defined (my $buf = Net::SSLeay::read ($self->{tls}))) { $self->{rbuf} .= $buf; $self->_drain_rbuf; } my $err = Net::SSLeay::get_error ($self->{tls}, -1); if ($err!= Net::SSLeay::ERROR_WANT_READ ()) { if ($err == Net::SSLeay::ERROR_SYSCALL ()) { return $self->_error ($!, 1); } elsif ($err == Net::SSLeay::ERROR_SSL ()) { return $self->_error (&Errno::EIO, 1); } # all others are fine for our purposes } }