亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rpp.c

?? openPBS的開放源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
    int		len;{	DOID("write")	struct	stream	*sp;	struct	pending	*pp;	int		hold, residual, more;	DBPRT((DBTO, "%s: entered index %d size %d\n", id, index, len))	if (index < 0 || index >= stream_num || len < 0) {		errno = EINVAL;		return -1;	}	if (len == 0)		return 0;	sp = &stream_array[index];	rpp_stale(sp);			/* check freshness */	switch (sp->state) {	case RPP_STALE:		errno = ETIMEDOUT;		return -1;	case RPP_CLOSE_PEND:		errno = EPIPE;		return -1;	case RPP_OPEN_PEND:			/* shouldn't happen */	case RPP_DEAD:	case RPP_FREE:	case RPP_CLOSE_WAIT1:			/* stream closed */	case RPP_CLOSE_WAIT2:	case RPP_LAST_ACK:		errno = ENOTCONN;		return -1;	default:		break;	}	residual = 0;	while (residual < len) {		hold = sp->pend_attempt % RPP_PKT_DATA;		if ((pp = sp->pend_tail) == NULL || hold == 0) {			pp = (struct pending *)malloc(sizeof(struct pending));			if (sp->pend_tail == NULL)				sp->pend_head = pp;			else				sp->pend_tail->next = pp;			sp->pend_tail = pp;			pp->data = (u_char *)malloc(RPP_PKT_SIZE);			assert(pp->data != NULL);			pp->next = NULL;		}		more = MIN(len - residual, RPP_PKT_DATA - hold);		memcpy(&pp->data[hold], (char *)buf + residual, more);		residual += more;		sp->pend_attempt += more;	}	if (rpp_recv_all() == -1)		return -1;	rpp_send_out();	return residual;}/***	Check a stream to see if it needs attention.*/staticintrpp_attention(index)    int		index;{	DOID("attention")	int			mesg, count;	int			seq;	struct	stream		*sp;	struct	recv_packet	*pp;	sp = &stream_array[index];	DBPRT((DBTO, "%s: stream %d in state %d addr %s\n",			id, index, sp->state, netaddr(&sp->addr)))	rpp_stale(sp);	switch (sp->state) {	case RPP_STALE:			/* need to report error */		return TRUE;	case RPP_CLOSE_PEND:		/* we haven't closed yet */	case RPP_CONNECT:		/* check for message */		break;	default:		return FALSE;	}	if (sp->msg_cnt > 0 && sp->recv_attempt <= sp->msg_cnt)		return TRUE;		/* message to read */	mesg = FALSE;	count = 0;	for (pp=sp->recv_head, seq=sp->recv_sequence; pp; pp=pp->next, seq++) {		count += pp->len;		if (pp->sequence != seq)			break;		if (pp->type != RPP_DATA) {	/* end of message */			mesg = TRUE;			break;		}	}	if (mesg)		sp->msg_cnt = count;	return mesg;}/***	Check some state before reading or skipping.  If it is**	okay to continue, return 1.  Otherwise, return <= 0.*/staticintrpp_okay(index)    int	index;{	struct	stream		*sp;	fd_set			fdset;	struct	timeval		tv;	FD_ZERO(&fdset);	while (rpp_attention(index) == FALSE) {		int	i;		tv.tv_sec = RPP_TIMEOUT;		tv.tv_usec = 0;		for (i=0; i<rpp_fd_num; i++)			FD_SET(rpp_fd_array[i], &fdset);		i = select(FD_SETSIZE, &fdset, NULL, NULL, &tv);		if (i == -1) 			return -1;		if (rpp_recv_all() == -1)			return -1;		rpp_send_out();	}  	sp = &stream_array[index];	if (sp->state == RPP_STALE) {		/* stale output */		errno = ETIMEDOUT;		return -1;	}	if (sp->recv_attempt == sp->msg_cnt) {	/* end of message */		if (sp->state == RPP_CLOSE_PEND)			return -2;		else			return 0;	}	return 1;}/***	Read a message.  Return data up to the end of a message**	or the end of the provided buffer.**	Return -1 on error, -2 if other side has closed, otherwise**	number of bytes read.*/intrpp_read(index, buf, len)    int		index;    void	*buf;    int		len;{	DOID("read")	int			hiwater, cpylen, hold, ret, xlen;	struct	recv_packet	*pp;	struct	stream		*sp;	DBPRT((DBTO, "%s: entered index %d\n", id, index))	if (index < 0 || index >= stream_num || len < 0) {		errno = EINVAL;		return -1;	}	if (len == 0)		return 0;	sp = &stream_array[index];	switch (sp->state) {	case RPP_DEAD:	case RPP_FREE:	case RPP_CLOSE_WAIT1:	case RPP_CLOSE_WAIT2:	case RPP_LAST_ACK:		errno = ENOTCONN;		return -1;	/* stream closed */	default:		break;	}	if ((ret = rpp_okay(index)) <= 0)		return ret;	sp = &stream_array[index];	cpylen = 0;				/* find packet to copy from */	for (pp=sp->recv_head; pp; pp=pp->next) {		int	bump = cpylen + pp->len;		if (sp->recv_attempt < bump)			break;		cpylen = bump;	}	hiwater = 0;	xlen = MIN(len, sp->msg_cnt);	hold = sp->recv_attempt - cpylen;	/* start point in pkt data */	while (pp && xlen > hiwater) {		/* got room */		cpylen = MIN(pp->len-hold, xlen-hiwater);		memcpy((char *)buf + hiwater, &pp->data[hold], cpylen);		hiwater += cpylen;		sp->recv_attempt += cpylen;		hold = 0;		pp = pp->next;	}	return hiwater;}/***	Commit data which has been read up to recv_attempt if flag**	is TRUE.  Otherwise, set recv_attempt back to the previous**	commit point recv_commit.**	Return -1 on error, FALSE on decommit or if end-of-message has**	not been reached, TRUE if end-of-message has been reached.*/intrpp_rcommit(index, flag)    int		index;    int		flag;{	DOID("rcommit")	struct	stream		*sp;	DBPRT((DBTO, "%s: entered index %d\n", id, index))	if (index < 0 || index >= stream_num) {		errno = EINVAL;		return -1;	}	sp = &stream_array[index];	switch (sp->state) {	case RPP_CLOSE_WAIT1:			/* stream closed */	case RPP_CLOSE_WAIT2:	case RPP_LAST_ACK:	case RPP_OPEN_PEND:			/* shouldn't happen */	case RPP_FREE:	case RPP_DEAD:		errno = ENOTCONN;		return -1;	default:		break;	}	if (flag == FALSE) {			/* no commit */		sp->recv_attempt = sp->recv_commit;		return 0;	}	sp->recv_commit = sp->recv_attempt;	return (sp->recv_commit == sp->msg_cnt);}/***	Reset end-of-message condition on a stream.  Any packets**	on the receive queue are freed.**	Return -1 on error, 0 otherwise.*/intrpp_eom(index)    int		index;{	DOID("eom")	struct	stream		*sp;	struct	recv_packet	*pp;	DBPRT((DBTO, "%s: entered index %d\n", id, index))	if (index < 0 || index >= stream_num) {		errno = EINVAL;		return -1;	}	sp = &stream_array[index];	switch (sp->state) {	case RPP_CLOSE_WAIT1:			/* stream closed */	case RPP_CLOSE_WAIT2:	case RPP_LAST_ACK:	case RPP_OPEN_PEND:			/* shouldn't happen */	case RPP_FREE:	case RPP_DEAD:		errno = ENOTCONN;		return -1;	default:		break;	}/***	work though recv packets*/	for (pp=sp->recv_head; pp; pp=sp->recv_head) {		if (pp->type == RPP_GOODBYE)	/* stream finished */			break;		if (sp->msg_cnt < pp->len)			break;		sp->recv_sequence++;		sp->msg_cnt -= pp->len;		if (pp->data)			free(pp->data);		sp->recv_head = pp->next;		free(pp);	}	if (sp->recv_head == NULL)		sp->recv_tail = NULL;	sp->recv_attempt = 0;	sp->recv_commit = 0;	return 0;}/***	Commit data which has been written up to pend_attempt if flag**	is TRUE.  Otherwise, set pend_attempt back to the previous**	commit point pend_commit.**	Return -1 on error, 0 otherwise.*/intrpp_wcommit(index, flag)    int		index;    int		flag;{	DOID("wcommit")	struct	pending		*pp, *next;	struct	stream		*sp;	DBPRT((DBTO, "%s: entered index %d\n", id, index))	if (index < 0 || index >= stream_num) {		errno = EINVAL;		return -1;	}	sp = &stream_array[index];	switch (sp->state) {	case RPP_CLOSE_PEND:		errno = EPIPE;		return -1;	case RPP_STALE:		errno = ETIMEDOUT;		return -1;	case RPP_CLOSE_WAIT1:			/* stream closed */	case RPP_CLOSE_WAIT2:	case RPP_LAST_ACK:	case RPP_OPEN_PEND:			/* shouldn't happen */	case RPP_FREE:	case RPP_DEAD:		errno = ENOTCONN;		return -1;	default:		break;	}	if (flag) {			/* commit */		if (rpp_dopending(index, FALSE))			return -1;		if (rpp_recv_all() == -1)			return -1;		rpp_send_out();		return 0;	}	sp->pend_attempt = sp->pend_commit;	if (sp->pend_head == NULL)		return 0;	for (pp=sp->pend_head->next; pp; pp=next) {		free(pp->data);		next = pp->next;		free(pp);	}	sp->pend_head->next = NULL;	sp->pend_tail = sp->pend_head;	return 0;}/***	Skip len characters of a message.*/intrpp_skip(index, len)    int		index;    int		len;{	DOID("skip")	struct	stream		*sp;	int			ret, hiwater;	DBPRT((DBTO, "%s: entered index %d\n", id, index))	if (index < 0 || index >= stream_num) {		errno = EINVAL;		return -1;	}	sp = &stream_array[index];	switch (sp->state) {	case RPP_DEAD:	case RPP_FREE:	case RPP_CLOSE_WAIT1:	case RPP_CLOSE_WAIT2:	case RPP_LAST_ACK:		errno = ENOTCONN;		return -1;	/* stream closed */	default:		break;	}	if ((ret = rpp_okay(index)) <= 0)		return ret;	sp = &stream_array[index];	hiwater = MIN(sp->msg_cnt - sp->recv_attempt, len);	sp->recv_attempt += hiwater;	return hiwater;}/***	Check for any stream with a message waiting and**	return the stream number or a -1 if there are none.*/intrpp_poll(){	DOID("poll")	int			i;	DBPRT((DBTO, "%s: entered streams %d\n", id, stream_num))	/*	** Read socket to get any packets	*/	for (;;) {		i = rpp_recv_all();		if (i == -1 || i == -3)			break;	}	if (i == -1)		return -1;	/*	** See if any stream has a message waiting.	*/	for (i=0; i<stream_num; i++) {		if (rpp_attention(i))			break;	}	if (i < stream_num)	/* found one */		return i;	rpp_send_out();	return -2;}/***	Process any stream i/o.**	Return 0 or a -1 if there was an error.*/intrpp_io(){	DOID("io")	int			i;	DBPRT((DBTO, "%s: entered streams %d\n", id, stream_num))	/*	** Read socket to get any packets	*/	for (;;) {		i = rpp_recv_all();		if (i == -1 || i == -3)			break;	}	if (i == -1)		return -1;	rpp_send_out();	return 0;}/***	Read a character.**	Returns  >=0	the char read**		  -1	error or EOD**		  -2	EOF*/intrpp_getc(index)    int		index;{	int	ret;	u_char	c;	if ((ret = rpp_read(index, &c, 1)) == 1)		return ((int)c);	return ((ret == -2) ? -2 : -1);}/***	Write a character.*/intrpp_putc(index, c)    int		index;    int		c;{	u_char	x = (u_char)c;	if (rpp_write(index, &x, 1) != 1)		return -1;	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产中文字幕一区| 91在线观看下载| 丁香六月久久综合狠狠色| 欧美日韩视频一区二区| 国产精品私人自拍| 美女一区二区久久| 欧美男人的天堂一二区| 亚洲日本一区二区| 国产在线精品不卡| caoporm超碰国产精品| 久久综合久久鬼色中文字| 香蕉久久夜色精品国产使用方法 | 狠狠色丁香婷婷综合| 色丁香久综合在线久综合在线观看| 精品久久人人做人人爱| 日韩精品电影在线| 欧美性极品少妇| 一区二区三区中文字幕电影| 国产精品白丝jk黑袜喷水| 精品国产免费一区二区三区香蕉 | 国产伦精品一区二区三区免费| 欧美日韩你懂得| 一区二区三区鲁丝不卡| 91免费在线播放| 最新久久zyz资源站| av动漫一区二区| 亚洲免费在线视频一区 二区| av不卡免费在线观看| 国产精品久久久一本精品 | 成人精品鲁一区一区二区| 2023国产精品视频| 国产一区欧美二区| 久久精品视频免费| 国产精品一二三| 国产精品久线在线观看| 99久久99久久免费精品蜜臀| 亚洲人精品一区| 欧美自拍偷拍一区| 亚洲成人免费视| 日韩情涩欧美日韩视频| 激情成人综合网| 中文文精品字幕一区二区| 成人av小说网| 亚洲一区影音先锋| 7777精品伊人久久久大香线蕉 | 成人福利视频网站| 亚洲三级在线免费观看| 欧美色老头old∨ideo| 天堂va蜜桃一区二区三区| 精品国产亚洲在线| 99久久综合狠狠综合久久| 亚洲综合清纯丝袜自拍| 欧美一卡2卡三卡4卡5免费| 国产在线观看一区二区| 国产精品久久久久久久午夜片| 91福利资源站| 久久精品国产999大香线蕉| 久久久久九九视频| 色丁香久综合在线久综合在线观看| 五月天婷婷综合| 国产午夜三级一区二区三| 91在线观看免费视频| 美腿丝袜亚洲色图| 日韩久久一区二区| 日韩一区二区三区在线| 成人精品在线视频观看| 午夜精品一区二区三区三上悠亚| 久久久久久久av麻豆果冻| 在线免费一区三区| 国产一区欧美日韩| 亚欧色一区w666天堂| 国产午夜精品理论片a级大结局 | 99视频精品全部免费在线| 日韩精品视频网站| 自拍偷拍欧美精品| 精品欧美一区二区久久| 一本大道久久a久久综合| 国产综合色视频| 亚洲国产精品久久一线不卡| 国产日韩影视精品| 日韩一级视频免费观看在线| 在线观看日韩国产| 国产成人综合网| 美女视频免费一区| 亚洲成人自拍一区| 一区视频在线播放| 国产午夜精品在线观看| 日韩一区二区三区高清免费看看| 91网站在线观看视频| 国产一区二区精品在线观看| 日本伊人精品一区二区三区观看方式| 国产精品麻豆一区二区| 久久无码av三级| 日韩一区和二区| 7777精品伊人久久久大香线蕉经典版下载 | 2020国产精品久久精品美国| 欧美天天综合网| 色婷婷精品久久二区二区蜜臀av| 丰满亚洲少妇av| 加勒比av一区二区| 免费高清不卡av| 午夜精品免费在线观看| 亚洲综合在线观看视频| 国产精品成人一区二区三区夜夜夜 | 亚洲欧美激情在线| 一区在线观看免费| **性色生活片久久毛片| 日本一二三不卡| 欧美精彩视频一区二区三区| 久久久久国产成人精品亚洲午夜| 欧美mv和日韩mv的网站| 日韩欧美国产电影| 精品成人在线观看| 久久综合九色综合97婷婷 | 制服视频三区第一页精品| 精品视频999| 欧美一区午夜视频在线观看| 91精品国产综合久久精品app| 91精品国产综合久久香蕉麻豆| 欧美一区二区人人喊爽| 日韩一区二区电影在线| 久久影院电视剧免费观看| 国产亚洲自拍一区| 国产精品久久久久久户外露出| 国产精品你懂的在线| 亚洲视频一区在线| 亚洲愉拍自拍另类高清精品| 婷婷中文字幕综合| 久久国产精品一区二区| 国产成人无遮挡在线视频| 成人免费黄色在线| 欧美亚洲尤物久久| 日韩女优毛片在线| 国产农村妇女毛片精品久久麻豆| 国产精品美日韩| 亚洲成人高清在线| 国产一区二区调教| 色诱亚洲精品久久久久久| 欧美精品自拍偷拍| 久久伊人蜜桃av一区二区| 日韩美女视频一区二区| 五月天精品一区二区三区| 激情国产一区二区 | 中文字幕一区日韩精品欧美| 亚洲精品成人精品456| 日韩av一二三| 暴力调教一区二区三区| 欧美精品黑人性xxxx| 国产女主播在线一区二区| 亚洲国产婷婷综合在线精品| 国产麻豆成人传媒免费观看| 在线视频欧美精品| 久久综合久色欧美综合狠狠| 亚洲精选一二三| 国产一区视频网站| 欧美日韩国产成人在线91| 亚洲国产精品ⅴa在线观看| 午夜激情一区二区| 成人aaaa免费全部观看| 欧美一级理论片| 亚洲女与黑人做爰| 国产一区二区在线视频| 在线播放中文字幕一区| 亚洲欧美日韩中文播放| 国产精品综合在线视频| 欧美一级高清片在线观看| 亚洲男女一区二区三区| 国产老女人精品毛片久久| 欧美日韩黄视频| 日韩一区在线免费观看| 国产综合久久久久影院| 91.麻豆视频| 亚洲自拍偷拍欧美| 99在线精品免费| 久久免费看少妇高潮| 日本视频中文字幕一区二区三区| 一道本成人在线| 亚洲视频网在线直播| 国产精品影视天天线| 欧美tickling网站挠脚心| 无码av免费一区二区三区试看| 色呦呦国产精品| 亚洲乱码日产精品bd| 成人动漫av在线| 中文字幕av资源一区| 国产一区在线看| 久久久久青草大香线综合精品| 日本成人中文字幕| 在线综合+亚洲+欧美中文字幕| 亚洲国产精品精华液网站| 91美女在线观看| 亚洲欧美视频一区| 色94色欧美sute亚洲13| 亚洲三级小视频| 在线视频中文字幕一区二区| 一区二区三区中文字幕电影 | 色悠久久久久综合欧美99| 亚洲品质自拍视频| 在线免费av一区| 日韩精品亚洲专区|