mirror of
https://github.com/thiagoralves/OpenPLC_v3.git
synced 2026-08-20 23:59:16 +08:00
Ensure that all bytes of a response message are written
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user