⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpxmit.c,v

📁 关于TCP方面的
💻 C,V
字号:
head	1.2;access;symbols;locks	dls:1.2; strict;comment	@ * @;1.2date	97.09.21.19.29.52;	author dls;	state Dist;branches;next	1.1;1.1date	94.01.14.03.51.20;	author dls;	state v2e1;branches;next	;desc@@1.2log@pre-3e code@text@/* tcpxmit.c - tcpxmit */#include <conf.h>#include <kernel.h>#include <network.h>/*------------------------------------------------------------------------ *  tcpxmit - handle TCP output events while we are transmitting *------------------------------------------------------------------------ */int tcpxmit(tcbnum, event)int	tcbnum, event;{	struct	tcb	*ptcb = &tcbtab[tcbnum];	int		tosend, tv, pending, window;	if (event == RETRANSMIT) {		tmclear(tcps_oport, MKEVENT(SEND, tcbnum));		tcprexmt(tcbnum, event);		ptcb->tcb_ostate = TCPO_REXMT;		return OK;	} /* else SEND */	tosend = tcphowmuch(ptcb);	if (tosend == 0) {		if (ptcb->tcb_flags & TCBF_NEEDOUT)			tcpsend(tcbnum, TSF_NEWDATA);	/* just an ACK */		if (ptcb->tcb_snext == ptcb->tcb_suna)			return OK;		/* still unacked data; restart transmit timer	*/		tv = MKEVENT(RETRANSMIT, tcbnum);		if (!tmleft(tcps_oport, tv))			tmset(tcps_oport, TCPQLEN, tv, ptcb->tcb_rexmt);		return OK;	} else if (ptcb->tcb_swindow == 0) {		ptcb->tcb_ostate = TCPO_PERSIST;		ptcb->tcb_persist = ptcb->tcb_rexmt;		tcpsend(tcbnum, TSF_NEWDATA);		tmset(tcps_oport, TCPQLEN, MKEVENT(PERSIST,tcbnum),			ptcb->tcb_persist);		return OK;	}	/* else, we have data and window */	ptcb->tcb_ostate = TCPO_XMIT;	window = min(ptcb->tcb_swindow, ptcb->tcb_cwnd);	pending = ptcb->tcb_snext - ptcb->tcb_suna;	while (tcphowmuch(ptcb) > 0 && pending < window) {		tcpsend(tcbnum, TSF_NEWDATA);		pending = ptcb->tcb_snext - ptcb->tcb_suna;	}	tv = MKEVENT(RETRANSMIT, tcbnum);	if (!tmleft(tcps_oport, tv))		tmset(tcps_oport, TCPQLEN, tv, ptcb->tcb_rexmt);	return OK;}@1.1log@Initial revision@text@d12 1a22 1	tcpsndurg(tcbnum);		/* send urgent data, if any	*/d45 1a45 1	while (tcphowmuch(ptcb) > 0 && pending <= window) {@

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -