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,261998/0918/sys/src/9/ip/tcp.c:20,26 (short | long | prev | next)
1997/0327    
	TimerON		= 1, 
	TimerDONE	= 2, 
	MAX_TIME 	= (1<<20),	/* Forever */ 
	TCP_ACK		= 50,		/* Timed ack sequence in ms */ 
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,14001998/0918/sys/src/9/ip/tcp.c:1384,1404
1997/0327    
				 * receive queue 
				 */ 
				if(bp) { 
					qpass(s->rq, bp); 
1998/0918    
					qpassnolim(s->rq, packblock(bp)); 
1997/0327    
					bp = nil; 
				} 
				tcb->rcv.nxt += length; 
				tcprcvwin(s); 
				if(tcb->acktimer.state != TimerON) 
1998/0313    
					tcpgo(tpriv, &tcb->acktimer); 
1997/0327    
 
				/* force an ack if there's a lot of unacked data */ 
				if(tcb->rcv.nxt-tcb->last_ack > (QMAX>>4)) 
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,16441998/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; 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)