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

📄 tcptimer.cc

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 CC
字号:
#include "root.h" #include "tcp.h"#include "ip.h"#define INITTM(x, peroid) \x##tm.init(peroid, (vfp_t)&tcpsock_t::x##to, this)void tcpsock_t::inittimer(){	rtt = 4*_10ms;	INITTM(rexmit, 5*_100ms);	INITTM(delack, 2*_100ms);	INITTM(keepalive, 0);	INITTM(persist, 0);	INITTM(timewait, 1*_1s);	INITTM(destroy, 1*_1s);}void tcpsock_t::stoptimer(){	rexmittm.stop();	delacktm.stop();	keepalivetm.stop();	persisttm.stop();	timewaittm.stop();	destroytm.stop();}/* NOTE: we only rexmit the first packet */void tcpsock_t::rexmitto(){	debug(TCPDBG, "rexmit timeout rtt = %d(ticks) %d(ms)\n", rtt, rtt * 10);//	((tcphdr_t*)(unackedq.head()->data))->dump();	if (++nrexmit >= MAXREXMIT) {		debug(TCPDBG, "rexmit too much!\n");		return;	}	pkt_t *pkt = unackedq.head();	if (!pkt)		return;	pkt_t *c = pkt->clone(AKERN);	if (!c) {		delpkt(pkt);		return;	}	tcphdr_t * th = (tcphdr_t*) c->data;	th->chksum = 0;	rexmittm.restart(rto());	ipoutput(c, IPPROTOTCP, laddr, faddr, &th->chksum);}void tcpsock_t::delackto(){	debug(TCPDBG, "delack timeout\n");	sendflags(TCPFACK);}void tcpsock_t::keepaliveto(){	debug(TCPDBG, "keepalive timeout\n");}void tcpsock_t::persistto(){	debug(TCPDBG, "persit timeout\n");}void tcpsock_t::timewaitto(){	debug(TCPDBG, "timewait timeout\n");	if (!refcnt)		delete this;}void tcpsock_t::entertimewait(){	change(STIMEWAIT);	rexmittm.stop();	delacktm.stop();	persisttm.stop();	keepalivetm.stop();	timewaittm.start();}/* NOTE: timewaitto/destroyto maybe called simutaneously */void tcpsock_t::destroyto(){	debug(TCPDBG, "destroy timeout\n");	if (!refcnt)		delete this;}

⌨️ 快捷键说明

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