/* server_init, which sets up `ctx` and `mb_mapping`, omitted for brevity */
static void *
server_work_thread (void *data)
{
int socket = (int) *((int *) data);
uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
int rc;
while (TRUE)
{
/* how do i specify a socket here? */
rc = modbus_receive (ctx, query);
if (rc < 0)
{
/* connection closed by client or error */
break;
}
/* do stuff with the query */
}
close (socket);
return NULL;
}
void
server_run ()
{
while (TRUE)
{
int rc;
int socket;
pthread_t work_thread;
socket = modbus_tcp_pi_listen (ctx, 1);
modbus_tcp_pi_accept (ctx, &socket);
pthread_create (&work_thread, NULL, server_work_thread, &socket);
/* error handling and `pthread_join` logic omitted for brevity */
}
}