From 1136480465daaf1f9f0145fd793e050cc957fa73 Mon Sep 17 00:00:00 2001 From: Steffen Pohle Date: Tue, 17 Mar 2026 19:33:49 +0100 Subject: [PATCH] fixing the ssl part. closed connection was not detected. --- Changelog | 5 +++++ ssl.cc | 3 ++- webserver.cc | 8 +++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index 7e1fe5f..c309d6e 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,8 @@ +2026-03-17: +- ssl: somehow ssl is not showing a closed TCP stream. + if the tcp stream closes, we get do not get any error and no data. + ret = SSL_read(ssl, buffer, len); will just return 0 + 2026-03-13: - json could not handle double types. diff --git a/ssl.cc b/ssl.cc index 68be5f2..9823a1d 100644 --- a/ssl.cc +++ b/ssl.cc @@ -280,10 +280,11 @@ long int SSLSocket::Read (char *buffer, long int len) { if (ret == -1) sslerror = SSL_get_error(ssl, -1); } while (ret == -1 && TimeoutTime() < timeout && (sslerror == SSL_ERROR_WANT_READ || sslerror == SSL_ERROR_WANT_WRITE)); + + if (ret == 0 && sslerror == 0) return -1; if (ret == -1 && (sslerror == SSL_ERROR_WANT_READ || sslerror == SSL_ERROR_WANT_WRITE)) ret = 0; - return ret; }; diff --git a/webserver.cc b/webserver.cc index 8d3e2f3..cf58ba0 100644 --- a/webserver.cc +++ b/webserver.cc @@ -30,6 +30,7 @@ WebServerClient::~WebServerClient () { /// @param _ssl_cert /// @return int WebServerClient::Accept (TCP *socket, std::string _ssl_key, std::string _ssl_cert) { + debug (""); if (ssl) delete ssl; ssl = NULL; if (tcp) delete tcp; @@ -51,6 +52,7 @@ int WebServerClient::Accept (TCP *socket, std::string _ssl_key, std::string _ssl /// @param socket /// @return int WebServerClient::Accept (TCP *socket) { + debug (""); if (ssl) delete ssl; ssl = NULL; if (tcp) delete tcp; @@ -74,6 +76,7 @@ WebRequestBuffer *WebServerClient::Loop () { else { len = tcp->ReadTimeout(buffer, WEB_READ_BUFFER_SIZE, 20); } + if (len != 0) debug ("len: %d", len); if (len < 0) return NULL; if (len == 0) return &ReqBuffer; ReqBuffer.AddBuffer (buffer, len); @@ -450,7 +453,7 @@ int WebServer::Loop() { } if (tcpclient) { - + debug ("new connection ssl_enabled:%d", ssl_enabled); if (webclients.size() > conf_maxclients) { printf ("max connections reached. closing connection.\n"); tcpclient->Close(); @@ -481,8 +484,11 @@ int WebServer::Loop() { reqbuffer = webclient->Loop(); if (reqbuffer == NULL) { + debug ("remove client"); // error on loop, remove and delete webclient. + debug ("count webclients:%d", webclients.size()); webclients.remove(webclient); + debug ("count webclients:%d", webclients.size()); delete webclient; wci = webclients.begin(); if (wci == webclients.end()) break;