Modbus

Parents b9f302d97b18
Children
Add TCP user timeout option for TCP sockets to clean-up non-responsive connections.

This shortens very long default system wide setting to 60 seconds which helps when TCP KeepAlive mechanism is not available.
  • +13 -0
    mb_tcp.c
  • --- a/mb_tcp.c Sun Oct 16 21:23:11 2022 +0100
    +++ b/mb_tcp.c Wed Jul 16 15:53:29 2025 +0200
    @@ -479,6 +479,19 @@
    return -1;
    }
    }
    + /* set the TCP user timeout. */
    + {
    + unsigned int optval;
    + socklen_t optlen = sizeof(optval);
    + optval = 60000; /* in milliseconds */
    + if(setsockopt(socket_id, SOL_TCP, TCP_USER_TIMEOUT, &optval, optlen) < 0) {
    +#ifdef ERRMSG
    + perror("setsockopt()");
    + fprintf(stderr, ERRMSG_HEAD "Error configuring socket 'TCP user timeout' option.\n");
    +#endif
    + return -1;
    + }
    + }
    /* set the TCP no delay flag. */
    {int bool_opt = 1;
    if (setsockopt(socket_id, SOL_TCP, TCP_NODELAY,