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:
- 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);
} 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;
};

@ -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;

Loading…
Cancel
Save