diff --git a/webserver/core/server.cpp b/webserver/core/server.cpp index 9dc771d..0a03db8 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; } }