On 2011/06/14 16:22, Stuart Henderson wrote:
> actually send keepalives at tcp_keepintvl half-seconds.
>
> previously, tcp_timer.c would arm the timer at tcp_keepintvl half-seconds
> in tcp_timer_keep(), but then the code touched in the diff below would
> reset it to tcp_keepidle half-seconds instead
>
> any comments?
> ok?
>
> Index: netinet/tcp_input.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/tcp_input.c,v
> retrieving revision 1.250
> diff -u -p -r1.250 tcp_input.c
> --- netinet/tcp_input.c 13 May 2011 14:31:16 -0000 1.250
> +++ netinet/tcp_input.c 14 Jun 2011 15:17:50 -0000
> @@ -961,8 +961,13 @@ findpcb:
> * Reset idle time and keep-alive timer.
> */
> tp->t_rcvtime = tcp_now;
> - if (TCPS_HAVEESTABLISHED(tp->t_state))
> - TCP_TIMER_ARM(tp, TCPT_KEEP, tcp_keepidle);
> + if (TCPS_HAVEESTABLISHED(tp->t_state)) {
> + if (tcp_always_keepalive ||
> + tp->t_inpcb->inp_socket->so_options & SO_KEEPALIVE)
sorry, brynet pointed out this depends on diff #2; if you'd like to
test it alone, use this line instead:
+ if (tp->t_inpcb->inp_socket->so_options & SO_KEEPALIVE)
> + TCP_TIMER_ARM(tp, TCPT_KEEP, tcp_keepintvl);
> + else
> + TCP_TIMER_ARM(tp, TCPT_KEEP, tcp_keepidle);
> + }
>
> #ifdef TCP_SACK
> if (tp->sack_enable)