Skip to content

modbus_reply: don't sleep before sending an exception over TCP - #881

Open
StalderT wants to merge 1 commit into
stephane:masterfrom
StalderT:fix/reply-no-sleep-over-tcp
Open

StalderT wants to merge 1 commit into
stephane:masterfrom
StalderT:fix/reply-no-sleep-over-tcp

Conversation

@StalderT

Copy link
Copy Markdown
Contributor

response_exception() slept for the context's response timeout, 500 ms by default, before flushing and sending every exception response. Any malformed request, an unknown function code included, therefore held the server for that long, and an unauthenticated peer can repeat it at will.

Over TCP the MBAP header gives the length of the request and modbus_receive() has already read all of it, so there is nothing left to wait for. Keep the flush, and only sleep over RTU, where the delay lets the rest of a corrupted frame arrive before it is discarded.

The unknown function code test now uses a response timeout shorter than the server's over TCP, so it fails if the server waits again.

Refs #874

response_exception() slept for the context's response timeout, 500 ms by default, before flushing and sending every exception response. Any malformed request, an unknown function code included, therefore held the server for that long, and an unauthenticated peer can repeat it at will.

Over TCP the MBAP header gives the length of the request and modbus_receive() has already read all of it, so there is nothing left to wait for. Keep the flush, and only sleep over RTU, where the delay lets the rest of a corrupted frame arrive before it is discarded.

The unknown function code test now uses a response timeout shorter than the server's over TCP, so it fails if the server waits again.

Refs stephane#874
@cla-bot

cla-bot Bot commented Sep 29, 2026

Copy link
Copy Markdown

We require contributors to sign our Contributor License Agreement. In order for us to review and merge your code, please fill https://forms.gle/5635zjphDo5JEJQSA to get added. Your document will be manually checked by the maintainer. Be patient...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant