فهرست منبع

Remove check for would_block in mbedtls

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.
Kedar Sovani 7 سال پیش
والد
کامیت
8f048ffddc
1فایلهای تغییر یافته به همراه0 افزوده شده و 7 حذف شده
  1. 0 7
      components/mbedtls/port/net_sockets.c

+ 0 - 7
components/mbedtls/port/net_sockets.c

@@ -212,13 +212,6 @@ static int net_would_block( const mbedtls_net_context *ctx, int *errout )
         *errout = error;
         *errout = error;
     }
     }
 
 
-    /*
-     * Never return 'WOULD BLOCK' on a non-blocking socket
-     */
-    if ( ( fcntl( ctx->fd, F_GETFL, 0) & O_NONBLOCK ) != O_NONBLOCK ) {
-        return ( 0 );
-    }
-
     switch ( error ) {
     switch ( error ) {
 #if defined EAGAIN
 #if defined EAGAIN
     case EAGAIN:
     case EAGAIN: