From 5d1cd3cb4b37fcb50e3f934b304aca96240c2612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santeri=20Hernej=C3=A4rvi?= 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 --- lib/tls/mbedtls/ssl.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/tls/mbedtls/ssl.c b/lib/tls/mbedtls/ssl.c index c4cd74aa5..f53c0e630 100644 --- a/lib/tls/mbedtls/ssl.c +++ b/lib/tls/mbedtls/ssl.c @@ -83,6 +83,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;