From 26eef6e071510d9ab0c83e6f108037e5628c8578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santeri=20Hernej=C3=A4rvi?= <santeri@spotify.com> Date: Thu, 14 Mar 2019 12:05:35 +0100 Subject: [PATCH] mbedtls: Fix reads getting stuck when the socket has disconnected We've seen this behaviour when iOS resumes from sleep: dbg> 0x11cd03750: ssl err dbg> lws_ssl_capable_read: WANT_READ dbg> 0x11cd03750: LWS_SSL_CAPABLE_MORE_SERVICE dbg> SSL Capable more service dbg> 0x11cd03750: SSL_read says -1 dbg> 0x11cd03750: ssl err 2 errno 57 dbg> lws_ssl_capable_read: WANT_READ dbg> 0x11cd0375dbg> SSL Capable more service dbg> 0x11cd03750: SSL_read says -1 dbg> 0x11cd03750: ssl err 2 errno 57 dbg> lws_ssl_capable_read: WANT_READ --- .gitignore | 1 + lib/tls/mbedtls/ssl.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 5805b27d..4b6639aa 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ doc /cov-int/ /.vs/ /build-mtls/ +/build-mingw64/ diff --git a/lib/tls/mbedtls/ssl.c b/lib/tls/mbedtls/ssl.c index b81f8886..69956f7d 100644 --- a/lib/tls/mbedtls/ssl.c +++ b/lib/tls/mbedtls/ssl.c @@ -99,6 +99,11 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) if (n < 0) { m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%p: ssl err %d errno %d\n", wsi, m, errno); + if (errno == LWS_ENOTCONN) { + /* If the socket isn't connected anymore, bail out. */ + wsi->socket_is_permanently_unusable = 1; + return LWS_SSL_CAPABLE_ERROR; + } if (m == SSL_ERROR_ZERO_RETURN || m == SSL_ERROR_SYSCALL) return LWS_SSL_CAPABLE_ERROR; -- GitLab