From: Kedar Sovani Date: Mon, 6 Aug 2018 06:06:40 +0000 (+0530) Subject: Remove check for would_block in mbedtls X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=87c3decc1255edced1348841866b49324533d152;p=esp-idf 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. --- diff --git a/components/mbedtls/port/net_sockets.c b/components/mbedtls/port/net_sockets.c index e64510071e..d6ca4b6741 100644 --- a/components/mbedtls/port/net_sockets.c +++ b/components/mbedtls/port/net_sockets.c @@ -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: