--- 2.2.14-tcp/net/ipv4/tcp_output.c.~1~ Fri Jan 7 18:19:25 2000 +++ 2.2.14-tcp/net/ipv4/tcp_output.c Wed Jan 12 03:24:40 2000 @@ -1004,9 +1004,11 @@ unsigned long timeout; /* Stay within the limit we were given */ - timeout = tp->ato; + timeout = (tp->ato << 1) >> 1; if (timeout > max_timeout) timeout = max_timeout; + if (!timeout) + timeout = tp->rto; timeout += jiffies; /* Use new timeout only if there wasn't a older one earlier. */ --- 2.2.14-tcp/net/ipv4/tcp_input.c.~1~ Fri Jan 7 18:19:25 2000 +++ 2.2.14-tcp/net/ipv4/tcp_input.c Wed Jan 12 03:59:44 2000 @@ -96,7 +96,7 @@ */ static void tcp_delack_estimator(struct tcp_opt *tp) { - if(tp->ato == 0) { + if(!((tp->ato << 1) >> 1)) { tp->lrcvtime = tcp_time_stamp; /* Help sender leave slow start quickly, --- 2.2.14-tcp/net/ipv4/tcp_ipv4.c.~1~ Fri Jan 7 18:19:25 2000 +++ 2.2.14-tcp/net/ipv4/tcp_ipv4.c Wed Jan 12 03:31:35 2000 @@ -1393,7 +1393,7 @@ newtp->snd_nxt = req->snt_isn + 1; newtp->snd_una = req->snt_isn + 1; newtp->srtt = 0; - newtp->ato = 0; + newtp->ato = 1 << 31; /* start in quickack mode */ newtp->snd_wl1 = req->rcv_isn; newtp->snd_wl2 = req->snt_isn; --- 2.2.14-tcp/net/ipv4/tcp_timer.c.~1~ Fri Jan 7 18:19:25 2000 +++ 2.2.14-tcp/net/ipv4/tcp_timer.c Wed Jan 12 03:51:18 2000 @@ -173,7 +173,12 @@ if (!atomic_read(&sk->sock_readers)) tcp_send_ack(sk); else - tcp_send_delayed_ack(&(sk->tp_pinfo.af_tcp), HZ/10); + { + struct tcp_opt * tp = &(sk->tp_pinfo.af_tcp); + + tp->delack_timer.expires = tp->rto + jiffies; + add_timer(&tp->delack_timer); + } } }