From 014f40d0b836b70360a3f1c099aa29fe2dda4a1d Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 6 Apr 2017 17:06:35 -0500 Subject: [PATCH] FS-10150: [freeswitch-core] Reduce writes to closed ssl sockets --- libs/libks/src/kws.c | 6 ++++-- libs/sofia-sip/libsofia-sip-ua/tport/ws.c | 6 ++++-- src/mod/endpoints/mod_verto/ws.c | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libs/libks/src/kws.c b/libs/libks/src/kws.c index 36e9ca37be..6afc066b24 100644 --- a/libs/libks/src/kws.c +++ b/libs/libks/src/kws.c @@ -448,10 +448,12 @@ KS_DECLARE(ks_ssize_t) kws_raw_write(kws_t *kws, void *data, ks_size_t bytes) } if (r == -1) { - ssl_err = SSL_get_error(kws->ssl, r); + if ((ssl_err = SSL_get_error(kws->ssl, r)) != SSL_ERROR_WANT_WRITE) { + break; + } } - } while (--sanity > 0 && ((r == -1 && ssl_err == SSL_ERROR_WANT_WRITE) || (kws->block && wrote < bytes))); + } while (--sanity > 0 && kws->block && wrote < bytes); if (ssl_err) { r = ssl_err * -1; diff --git a/libs/sofia-sip/libsofia-sip-ua/tport/ws.c b/libs/sofia-sip/libsofia-sip-ua/tport/ws.c index 931e152045..8d3db0a73e 100644 --- a/libs/sofia-sip/libsofia-sip-ua/tport/ws.c +++ b/libs/sofia-sip/libsofia-sip-ua/tport/ws.c @@ -442,10 +442,12 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes) } if (r == -1) { - ssl_err = SSL_get_error(wsh->ssl, r); + if ((ssl_err = SSL_get_error(wsh->ssl, r)) != SSL_ERROR_WANT_WRITE) { + break; + } } - } while (--sanity > 0 && ((r == -1 && ssl_err == SSL_ERROR_WANT_WRITE) || (wsh->block && wrote < bytes))); + } while (--sanity > 0 && wsh->block && wrote < bytes); if (ssl_err) { r = ssl_err * -1; diff --git a/src/mod/endpoints/mod_verto/ws.c b/src/mod/endpoints/mod_verto/ws.c index 931e152045..8d3db0a73e 100644 --- a/src/mod/endpoints/mod_verto/ws.c +++ b/src/mod/endpoints/mod_verto/ws.c @@ -442,10 +442,12 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes) } if (r == -1) { - ssl_err = SSL_get_error(wsh->ssl, r); + if ((ssl_err = SSL_get_error(wsh->ssl, r)) != SSL_ERROR_WANT_WRITE) { + break; + } } - } while (--sanity > 0 && ((r == -1 && ssl_err == SSL_ERROR_WANT_WRITE) || (wsh->block && wrote < bytes))); + } while (--sanity > 0 && wsh->block && wrote < bytes); if (ssl_err) { r = ssl_err * -1;