From 3163325e01c9a8ca545ed6aa8e49f0933d1f4ad5 Mon Sep 17 00:00:00 2001 From: Robert Lubos Date: Wed, 4 Dec 2024 17:19:36 +0100 Subject: [PATCH] net: sockets: tls: Fix connect timeout error code In case TLS connect timed out during the handshake, errno was set to EAGAIN which is unexpected and confusing. Fix this and set the errno to ETIMEDOUT instead. Signed-off-by: Robert Lubos --- subsys/net/lib/sockets/sockets_tls.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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; }