From 16322e773167a2f14316e889244ee157301574cb Mon Sep 17 00:00:00 2001 From: Sebastian Scholz Date: Tue, 4 Feb 2025 11:28:17 +0100 Subject: [PATCH] Ensure that all bytes of a response message are written --- webserver/core/server.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/webserver/core/server.cpp b/webserver/core/server.cpp index 9dc771d1..0a03db88 100644 --- a/webserver/core/server.cpp +++ b/webserver/core/server.cpp @@ -180,15 +180,27 @@ int listenToClient(int client_fd, unsigned char *buffer) //----------------------------------------------------------------------------- void processMessage(unsigned char *buffer, int bufferSize, int client_fd, int protocol_type) { + int messageSize = 0; if (protocol_type == MODBUS_PROTOCOL) { - int messageSize = processModbusMessage(buffer, bufferSize); - write(client_fd, buffer, messageSize); + messageSize = processModbusMessage(buffer, bufferSize); } else if (protocol_type == ENIP_PROTOCOL) { - int messageSize = processEnipMessage(buffer, bufferSize); - write(client_fd, buffer, messageSize); + messageSize = processEnipMessage(buffer, bufferSize); + } + while (messageSize > 0) + { + ssize_t bytesWritten = write(client_fd, buffer, messageSize); + if (bytesWritten < 0) + { + char log_msg[1000]; + sprintf(log_msg, "Server: Error writing response: %zd\n", bytesWritten); + log(log_msg); + break; + } + buffer += bytesWritten; + messageSize -= bytesWritten; } }