Erratum: It **is** inherited - I had oberwritten the TCP_USER_TIMEOUT in handle_new_connect() with a missing TICKS_TO_S() - so it was a too high value (ticks instead of seconds).
Tried again in tcp_init() on the listening socket:
```diff --- a/src/core/tcp_main.c +++ b/src/core/tcp_main.c @@ -3172,6 +3172,22 @@ int tcp_init(struct socket_info *sock_info) } #endif init_sock_keepalive(sock_info->socket); + + + if ((optval = TICKS_TO_S(cfg_get(tcp, tcp_cfg, send_timeout)))) { + optval *= 1000; + if(setsockopt(sock_info->socket, IPPROTO_TCP, TCP_USER_TIMEOUT, &optval, + sizeof(optval)) + < 0) { + LM_WARN("failed to set TCP_USER_TIMEOUT: %s\n", + strerror(errno)); + } else { + LM_INFO("Set TCP_USER_TIMEOUT=%d ms\n", optval); + } + } + + + if(bind(sock_info->socket, &addr->s, sockaddru_len(*addr)) == -1) { LM_ERR("bind(%x, %p, %d) on %s:%d : %s\n", sock_info->socket, &addr->s, (unsigned)sockaddru_len(*addr), sock_info->address_str.s, ```
=> working, too.
What is your opinion? Should it be in tcp_init() or in handle_new_connect()?