Use tcp_send_timeout config option also on listening socket to timeout outbound messages sent on passive inbound connections.

Pre-Submission Checklist

Type Of Change

Checklist:

Description

Based on the description of core parameter "tcp_send_timeout" the timeout should also work for sending on forked incoming tcp connections. But sending on a broken connection causes the kernel to use the default values of tcp_retries1 and tcp_retries2 , leading to try to send a SIP message for 15 minutes. This makes absolutely no sense in a real time kamailio application.

Following man 7 tcp TCP_USER_TIMEOUT can be used on recent Linux kernels to utilize tcp_send_timeout:

   TCP_USER_TIMEOUT (since Linux 2.6.37)
          This  option  takes  an  unsigned  int as an argument.  When the value is greater than 0, it specifies the maximum
          amount of time in milliseconds that transmitted data may remain unacknowledged before TCP will forcibly close  the
          corresponding connection and return ETIMEDOUT to the application.  If the option value is specified as 0, TCP will
          use the system default.

          Increasing user timeouts allows a TCP connection to survive extended periods without end-to-end connectivity.  De‐
          creasing  user  timeouts  allows applications to "fail fast", if so desired.  Otherwise, failure may take up to 20
          minutes with the current system defaults in a normal WAN environment.

          This option can be set during any state of a TCP connection, but is effective only during the synchronized  states
          of  a  connection  (ESTABLISHED,  FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, and LAST-ACK).  Moreover, when used
          with the TCP keepalive (SO_KEEPALIVE) option, TCP_USER_TIMEOUT will override keepalive to determine when to  close
          a connection due to keepalive failure.

          The option has no effect on when TCP retransmits a packet, nor when a keepalive probe is sent.

          This option, like many others, will be inherited by the socket returned by accept(2), if it was set on the listen‐
          ing socket.

          Further details on the user timeout feature can be found in RFC 793 and RFC 5482 ("TCP User Timeout Option").

Having a tcp connection break by firewall or network breakdown the retransmits to this destination are now aborted after tcp_send_timeout seconds with a

NOTICE: <core> [core/tcp_read.c:267]: tcp_read_data(): error reading: Connection timed out (110) ([1.2.3.4]:51151 ->

You can view, comment on, or merge this pull request online at:

  https://github.com/kamailio/kamailio/pull/3528

Commit Summary

File Changes

(2 files)

Patch Links:


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <kamailio/kamailio/pull/3528@github.com>