diff --git a/src/kits/network/libnetapi/SecureSocket.cpp b/src/kits/network/libnetapi/SecureSocket.cpp index c2c3dc7618..fdd77311ca 100644 --- a/src/kits/network/libnetapi/SecureSocket.cpp +++ b/src/kits/network/libnetapi/SecureSocket.cpp @@ -551,6 +551,12 @@ BSecureSocket::Read(void* buffer, size_t size) bytesRead = SSL_read(fPrivate->fSSL, buffer, size); if (bytesRead >= 0) return bytesRead; + // Don't retry in cases of "no data available" for non-blocking sockets + int error = SSL_get_error(fPrivate->fSSL, bytesRead); + if (error == SSL_ERROR_WANT_READ || error == SSL_ERROR_WANT_WRITE) + return B_WOULD_BLOCK; + // Otherwise, check if we should retry (maybe we were interrupted by + // a signal, for example) retry = BIO_should_retry(SSL_get_rbio(fPrivate->fSSL)); } while(retry != 0);