From 700976f7091334bdeacb20c5702dddafeec738d2 Mon Sep 17 00:00:00 2001 From: Kedar Sovani Date: Mon, 6 Aug 2018 11:36:40 +0530 Subject: [PATCH] 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. --- components/mbedtls/port/net_sockets.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/components/mbedtls/port/net_sockets.c b/components/mbedtls/port/net_sockets.c index 1a182d8f4..1a64f7f70 100644 --- a/components/mbedtls/port/net_sockets.c +++ b/components/mbedtls/port/net_sockets.c @@ -210,13 +210,6 @@ static int net_would_block( const mbedtls_net_context *ctx, int *errout ) *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 ) { #if defined EAGAIN case EAGAIN: