The main MODBUS control thread serialises MODBUS backend processing by accepting requests from a mailbox. It parses the request data, and where valid (and supported by the user-application supplied backend) will pass the data to the relevant handler function for processing.
Note: Since the backend handler functions are called from the main MODBUS control thread context they should NEVER block. This limits the operations that can be performed within the specific handler functions. If scheduling is required to complete an operation then control should be passed to a suitable user-application thread.
The MODBUS requests are posted to the main MODBUS control thread from the transport listener code. The transports are responsible for the specific communication layer wrapping of the MODBUS PDU packets.
Multiple transport layers can be configured and the main control loop will handle requests from all, directing responses back to the original requesting transport layer. This allows a single application (for example) to provide ModbusTCP support as well as serial line server support. Normally transport implementations would be limited to ModbusTCP, MODBUS-RTU or MODBUS-ASCII however the user could provide support for arbitrary transport mechanisms, e.g. a MODBUS-LOCALTEST special transport for doing internal memory-based loopback messaging for unit-testing.