From e10ee2d58551c6fab08e91cced6368d8d7910bbb Mon Sep 17 00:00:00 2001 From: Michael Heimpold Date: Sat, 27 Sep 2014 22:50:33 +0200 Subject: [PATCH] Do not reply on broadcast requests (fixes #153) --- src/modbus.c | 3 ++- tests/unit-test-client.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/modbus.c b/src/modbus.c index 51c5cac..52d06af 100644 --- a/src/modbus.c +++ b/src/modbus.c @@ -1055,7 +1055,8 @@ int modbus_reply(modbus_t *ctx, const uint8_t *req, break; } - return send_msg(ctx, rsp, rsp_length); + /* Suppress any response when the request was a broadcast */ + return slave ? send_msg(ctx, rsp, rsp_length) : 0; } int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, diff --git a/tests/unit-test-client.c b/tests/unit-test-client.c index 8e42aca..314b55a 100644 --- a/tests/unit-test-client.c +++ b/tests/unit-test-client.c @@ -429,8 +429,8 @@ int main(int argc, char *argv[]) rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, tab_rp_registers); - printf("2/3 Reply after a broadcast query: "); - ASSERT_TRUE(rc == UT_REGISTERS_NB, ""); + printf("2/3 No reply after a broadcast query: "); + ASSERT_TRUE(rc == -1 && errno == ETIMEDOUT, ""); /* Restore slave */ if (use_backend == RTU) { -- libgit2 0.21.4