[haiku-commits] haiku: hrev53853 - src/kits/network/libnetapi

  • From: Adrien Destugues <pulkomandy@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 8 Feb 2020 16:24:04 -0500 (EST)

hrev53853 adds 1 changeset to branch 'master'
old head: 3a63d1efff9b6fcc5423d11a2b029d59c15acd0f
new head: 0e280da525d18b9ca2da5e36f16b6b29993a6d75
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=0e280da525d1+%5E3a63d1efff9b

----------------------------------------------------------------------------

0e280da525d1: SecureSocket: fix non-blocking reads
  
  OpenSSL says we should retry when a non-blocking read finds no data is
  pending. But in that case we should not retry immediately, because the
  operation should be non-blocking.

                             [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev53853
Commit:      0e280da525d18b9ca2da5e36f16b6b29993a6d75
URL:         https://git.haiku-os.org/haiku/commit/?id=0e280da525d1
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Sat Feb  8 20:59:47 2020 UTC

----------------------------------------------------------------------------

1 file changed, 6 insertions(+)
src/kits/network/libnetapi/SecureSocket.cpp | 6 ++++++

----------------------------------------------------------------------------

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);
 


Other related posts:

  • » [haiku-commits] haiku: hrev53853 - src/kits/network/libnetapi - Adrien Destugues