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

📄 tcpshskip.c,v

📁 关于TCP方面的
💻 C,V
字号:
head	1.1;access;symbols;locks	dls:1.1; strict;comment	@ * @;1.1date	94.01.14.03.51.20;	author dls;	state v2e1;branches;next	;desc@@1.1log@Initial revision@text@/* tcpshskip.c - tcpshskip */#include <conf.h>#include <kernel.h>#include <network.h>#include <q.h>/*------------------------------------------------------------------------ *  tcpshskip - skip urgent data holes in send buffer *------------------------------------------------------------------------ */int tcpshskip(ptcb, datalen, poff)struct	tcb	*ptcb;int	datalen;int	*poff;{	struct 	uqe	*puqe;	tcpseq		lseq;	int		resid = 0;	if (ptcb->tcb_suhq == EMPTY)		return datalen;	puqe = (struct uqe *)deq(ptcb->tcb_suhq);	while (puqe) {		lseq = ptcb->tcb_snext + datalen - 1;		if (SEQCMP(lseq, puqe->uq_seq) > 0)			resid = lseq - puqe->uq_seq;		/* chop off at urgent boundary, but save the hole...	*/		if (resid < datalen) {			datalen -= resid;			if (enq(ptcb->tcb_suhq, puqe,					SUHK(ptcb, puqe->uq_seq)) < 0)				uqfree(puqe);	/* shouldn't happen */			return datalen;		}		/*		 * else, we're skipping a hole now adjust the beginning		 * of the segment.		 */		lseq = puqe->uq_seq + puqe->uq_len;		resid = lseq - ptcb->tcb_snext;		if (resid > 0) {			/* overlap... */			*poff += resid;			if (*poff > ptcb->tcb_sbsize)				*poff -= ptcb->tcb_sbsize;			datalen -= resid;			if (datalen < 0)				datalen = 0;		}		uqfree(puqe);		puqe = (struct uqe *)deq(ptcb->tcb_suhq);	}	/* puqe == 0 (No more holes left) */	freeq(ptcb->tcb_suhq);	ptcb->tcb_suhq = EMPTY;	return datalen;}@

⌨️ 快捷键说明

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