Ensure that all bytes of a response message are written

This commit is contained in:
Sebastian Scholz
2025-05-09 20:55:36 +02:00
parent 64f9c11263
commit e9a8410419
+16 -4
View File
@@ -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;
}
}