diff --git a/src/modbus-rtu.c b/src/modbus-rtu.c index 01e703d46..df3887dcb 100644 --- a/src/modbus-rtu.c +++ b/src/modbus-rtu.c @@ -91,8 +91,10 @@ static const uint8_t table_crc_lo[] = { * internal slave ID in slave mode */ static int _modbus_set_slave(modbus_t *ctx, int slave) { + /* limt slave modified: 247 --> 255 */ + int max_slave = 255; /* Broadcast address is 0 (MODBUS_BROADCAST_ADDRESS) */ - if (slave >= 0 && slave <= 247) { + if (slave >= 0 && slave <= max_slave) { ctx->slave = slave; } else { errno = EINVAL; diff --git a/src/modbus-udp.c b/src/modbus-udp.c index 768814883..ee58ec2ff 100644 --- a/src/modbus-udp.c +++ b/src/modbus-udp.c @@ -183,6 +183,8 @@ static ssize_t _modbus_udp_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length) { int len = ctx_udp->_u > rsp_length ? rsp_length : ctx_udp->_u; memcpy(rsp, ctx_udp->buffer, (size_t) len); ctx_udp->_u -= len; + // Shift the buffer. + memmove(ctx_udp->buffer,ctx_udp->buffer+len,(size_t)ctx_udp->_u); return len; } else { if( rsp_length > MODBUS_UDP_MAX_ADU_LENGTH )