diff --git a/subsys/net/lib/sockets/sockets_tls.c b/subsys/net/lib/sockets/sockets_tls.c index bb7b44097d0..b28f8aa8be9 100644 --- a/subsys/net/lib/sockets/sockets_tls.c +++ b/subsys/net/lib/sockets/sockets_tls.c @@ -2141,13 +2141,15 @@ int ztls_connect_ctx(struct tls_context *ctx, const struct sockaddr *addr, { int ret; int sock_flags; + bool is_non_block; sock_flags = zsock_fcntl(ctx->sock, F_GETFL, 0); if (sock_flags < 0) { return -EIO; } - if (sock_flags & O_NONBLOCK) { + is_non_block = sock_flags & O_NONBLOCK; + if (is_non_block) { (void)zsock_fcntl(ctx->sock, F_SETFL, sock_flags & ~O_NONBLOCK); } @@ -2157,7 +2159,7 @@ int ztls_connect_ctx(struct tls_context *ctx, const struct sockaddr *addr, return ret; } - if (sock_flags & O_NONBLOCK) { + if (is_non_block) { (void)zsock_fcntl(ctx->sock, F_SETFL, sock_flags); } @@ -2188,6 +2190,10 @@ int ztls_connect_ctx(struct tls_context *ctx, const struct sockaddr *addr, ret = tls_mbedtls_handshake( ctx, K_MSEC(CONFIG_NET_SOCKETS_CONNECT_TIMEOUT)); if (ret < 0) { + if ((ret == -EAGAIN) && !is_non_block) { + ret = -ETIMEDOUT; + } + goto error; }