fixing the ssl part. closed connection was not detected.

master
Steffen Pohle 2 weeks ago
parent eb5309723b
commit 1136480465

@ -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: 2026-03-13:
- json could not handle double types. - json could not handle double types.

@ -280,10 +280,11 @@ long int SSLSocket::Read (char *buffer, long int len) {
if (ret == -1) sslerror = SSL_get_error(ssl, -1); if (ret == -1) sslerror = SSL_get_error(ssl, -1);
} while (ret == -1 && TimeoutTime() < timeout && } while (ret == -1 && TimeoutTime() < timeout &&
(sslerror == SSL_ERROR_WANT_READ || sslerror == SSL_ERROR_WANT_WRITE)); (sslerror == SSL_ERROR_WANT_READ || sslerror == SSL_ERROR_WANT_WRITE));
if (ret == 0 && sslerror == 0) return -1;
if (ret == -1 && if (ret == -1 &&
(sslerror == SSL_ERROR_WANT_READ || sslerror == SSL_ERROR_WANT_WRITE)) (sslerror == SSL_ERROR_WANT_READ || sslerror == SSL_ERROR_WANT_WRITE))
ret = 0; ret = 0;
return ret; return ret;
}; };

@ -30,6 +30,7 @@ WebServerClient::~WebServerClient () {
/// @param _ssl_cert /// @param _ssl_cert
/// @return /// @return
int WebServerClient::Accept (TCP *socket, std::string _ssl_key, std::string _ssl_cert) { int WebServerClient::Accept (TCP *socket, std::string _ssl_key, std::string _ssl_cert) {
debug ("");
if (ssl) delete ssl; if (ssl) delete ssl;
ssl = NULL; ssl = NULL;
if (tcp) delete tcp; if (tcp) delete tcp;
@ -51,6 +52,7 @@ int WebServerClient::Accept (TCP *socket, std::string _ssl_key, std::string _ssl
/// @param socket /// @param socket
/// @return /// @return
int WebServerClient::Accept (TCP *socket) { int WebServerClient::Accept (TCP *socket) {
debug ("");
if (ssl) delete ssl; if (ssl) delete ssl;
ssl = NULL; ssl = NULL;
if (tcp) delete tcp; if (tcp) delete tcp;
@ -74,6 +76,7 @@ WebRequestBuffer *WebServerClient::Loop () {
else { else {
len = tcp->ReadTimeout(buffer, WEB_READ_BUFFER_SIZE, 20); 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 NULL;
if (len == 0) return &ReqBuffer; if (len == 0) return &ReqBuffer;
ReqBuffer.AddBuffer (buffer, len); ReqBuffer.AddBuffer (buffer, len);
@ -450,7 +453,7 @@ int WebServer::Loop() {
} }
if (tcpclient) { if (tcpclient) {
debug ("new connection ssl_enabled:%d", ssl_enabled);
if (webclients.size() > conf_maxclients) { if (webclients.size() > conf_maxclients) {
printf ("max connections reached. closing connection.\n"); printf ("max connections reached. closing connection.\n");
tcpclient->Close(); tcpclient->Close();
@ -481,8 +484,11 @@ int WebServer::Loop() {
reqbuffer = webclient->Loop(); reqbuffer = webclient->Loop();
if (reqbuffer == NULL) { if (reqbuffer == NULL) {
debug ("remove client");
// error on loop, remove and delete webclient. // error on loop, remove and delete webclient.
debug ("count webclients:%d", webclients.size());
webclients.remove(webclient); webclients.remove(webclient);
debug ("count webclients:%d", webclients.size());
delete webclient; delete webclient;
wci = webclients.begin(); wci = webclients.begin();
if (wci == webclients.end()) break; if (wci == webclients.end()) break;

Loading…
Cancel
Save