]> granicus.if.org Git - esp-idf/commitdiff
Remove check for would_block in mbedtls
authorKedar Sovani <kedars@gmail.com>
Mon, 6 Aug 2018 06:06:40 +0000 (11:36 +0530)
committerVikram Dattu <vikram.dattu@espressif.com>
Thu, 17 Oct 2019 11:06:18 +0000 (16:36 +0530)
Basically, in the portability layer, it is checked if the socket is
NON-block, and if not, then even the EAGAIN and EWOULDBLOCK errors are
diverted to a RECV error. This causes a problem for sockets with
receive timeouts set. When such a timeout is set, the condition for
NON_BLOCK isn't met and hence a hard error is returned.

Searching for EAGAIN and EWOULDBLOCK in lwip returns only 3 results
(accept, recvfrom, close) and all of them look to be genuine cases for
EWOULDBLOCK. So removing this check to make receive timeout with TLS
work.

components/mbedtls/port/net_sockets.c

index e64510071e5a3ac8572a6607490cf4935ccd05ed..d6ca4b6741bedc3333770d79b301d3fd90472e29 100644 (file)
@@ -198,14 +198,6 @@ static int net_would_block( const mbedtls_net_context *ctx )
 {
     int error = errno;
 
-    /*
-     * Never return 'WOULD BLOCK' on a non-blocking socket
-     */
-    if ( ( fcntl( ctx->fd, F_GETFL, 0) & O_NONBLOCK ) != O_NONBLOCK ) {
-        errno = error;
-        return ( 0 );
-    }
-
     switch ( errno = error ) {
 #if defined EAGAIN
     case EAGAIN: