| plan 9 kernel history: overview | file list | diff list |
1998/0918/ip/tcp.c (diff list | history)
| 1998/0901/sys/src/9/ip/tcp.c:20,26 – 1998/0918/sys/src/9/ip/tcp.c:20,26 (short | long | prev | next) | ||
| 1997/0327 | TimerON = 1, TimerDONE = 2, MAX_TIME = (1<<20), /* Forever */ | |
| 1998/0918 | TCP_ACK = 200, /* Timed ack sequence in ms */ | |
| 1997/0327 | URG = 0x20, /* Data marked urgent */ ACK = 0x10, /* Acknowledge is valid */ | |
| 1998/0901/sys/src/9/ip/tcp.c:1384,1400 – 1998/0918/sys/src/9/ip/tcp.c:1384,1404 | ||
| 1997/0327 | * receive queue */ if(bp) { | |
| 1998/0918 | qpassnolim(s->rq, packblock(bp)); | |
| 1997/0327 | bp = nil; } tcb->rcv.nxt += length; tcprcvwin(s); | |
| 1998/0313 |
| |
| 1997/0327 |
| |
| 1998/0918 | /* * force an ack if we've got 2 segs * and the user isn't backing up */ if(tcb->rcv.nxt - tcb->last_ack >= 2*tcb->mss && qlen(s->rq) < 8*tcb->mss) | |
| 1997/0327 | tcb->flags |= FORCE; | |
| 1998/0918 | else if(tcb->acktimer.state != TimerON) tcpgo(tpriv, &tcb->acktimer); | |
| 1997/0327 | break; case Finwait2: | |
| 1998/0901/sys/src/9/ip/tcp.c:1637,1644 – 1998/0918/sys/src/9/ip/tcp.c:1641,1655 | ||
| 1997/0327 | * expect acknowledges */ if(ssize != 0){ | |
| 1998/0918 | /* round trip depenency */ | |
| 1997/0327 | x = backoff(tcb->backoff) * (tcb->mdev + (tcb->srtt>>LOGAGAIN) + MSPTICK) / MSPTICK; | |
| 1998/0918 | /* take into account delayed ack */ if(sent <= 2*tcb->mss) x += TCP_ACK/MSPTICK; /* sanity check */ | |
| 1997/0327 | if(x > (10000/MSPTICK)) x = 10000/MSPTICK; tcb->timer.start = x; | |