From 29310bf086b2b8a12d33fdaeee6680babf369221 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 7 Jun 1999 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1999-06-07 --- ip/tcp.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ip/tcp.c b/ip/tcp.c index a47801a79d287fc949a830af11740fabdf2103b0..b558dbe588c430d8066a4bcbde18968ab8802a7a 100644 --- a/ip/tcp.c +++ b/ip/tcp.c @@ -175,6 +175,7 @@ struct Tcpctl int max_snd; /* Max send */ ulong last_ack; /* Last acknowledege received */ uchar backoff; /* Exponential backoff counter */ + int backedoff; /* ms we've backed off for rexmits */ uchar flags; /* State flags */ ulong sndcnt; /* Amount of data in send queue */ Reseq *reseq; /* Resequencing queue */ @@ -1112,6 +1113,7 @@ update(Conv *s, Tcp *seg) tcphalt(tpriv, &tcb->rtt_timer); if((tcb->flags&RETRAN) == 0) { tcb->backoff = 0; + tcb->backedoff = 0; rtt = tcb->rtt_timer.start - tcb->rtt_timer.count; if(rtt == 0) rtt = 1; /* otherwise all close systems will rexmit in 0 time */ @@ -1150,6 +1152,7 @@ done: tcb->flags &= ~RETRAN; tcb->backoff = 0; + tcb->backedoff = 0; } void @@ -1902,7 +1905,7 @@ tcptimeout(void *arg) { Conv *s; Tcpctl *tcb; - int back, maxback; + int maxback; Tcppriv *tpriv; s = (Conv*)arg; @@ -1917,8 +1920,8 @@ tcptimeout(void *arg) maxback = MAXBACKMS/2; else maxback = MAXBACKMS; - back = backoff(tcb->backoff) * (tcb->mdev + (tcb->srtt>>LOGAGAIN)); - if(back >= maxback) { + tcb->backedoff += tcb->timer.start * MSPTICK; + if(tcb->backedoff >= maxback) { localclose(s, Etimedout); break; }