Index: sys/netinet/tcp_timewait.c =================================================================== --- sys/netinet/tcp_timewait.c +++ sys/netinet/tcp_timewait.c @@ -225,6 +225,7 @@ { struct tcptw *tw; struct inpcb *inp = tp->t_inpcb; + struct tcptemp *t_template; int acknow; struct socket *so; #ifdef INET6 @@ -238,6 +239,16 @@ KASSERT((inp->inp_flags & INP_DROPPED) == 0, ("tcp_twstart: " "(inp->inp_flags & INP_DROPPED) != 0")); + acknow = tp->t_flags & TF_ACKNOW; + if (acknow) { + t_template = tcpip_maketemplate(inp); + if (t_template != NULL) { + tcp_respond(tp, t_template->tt_ipgen, &t_template->tt_t, + (struct mbuf *)NULL, tp->rcv_nxt, tp->snd_una, 0); + free(t_template, M_TEMP); + acknow = 0; + } + } if (V_nolocaltimewait) { int error = 0; #ifdef INET6 @@ -316,13 +327,6 @@ tw->irs = tp->irs; tw->t_starttime = tp->t_starttime; tw->tw_time = 0; - -/* XXX - * If this code will - * be used for fin-wait-2 state also, then we may need - * a ts_recent from the last segment. - */ - acknow = tp->t_flags & TF_ACKNOW; /* * First, discard tcpcb state, which includes stopping its timers and