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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? htreader.c

?? www工具包. 這是W3C官方支持的www支撐庫(kù). 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號(hào):
/*								     HTReader.c**	READ STREAM FROM THE NETWORK USING TCP****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTReader.c,v 2.31 2000/07/11 09:15:28 kahan Exp $**** HISTORY:**	6 June 95  HFN	Written*//* Library Include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTNetMan.h"#include "HTReader.h"					 /* Implemented here */struct _HTStream {    const HTStreamClass *	isa;    /* ... */};struct _HTInputStream {    const HTInputStreamClass *	isa;    HTChannel *			ch;    HTHost *			host;    char *			write;			/* Last byte written */    char *			read;			   /* Last byte read */    int				b_read;    char			data [INPUT_BUFFER_SIZE];	   /* buffer */};/* ------------------------------------------------------------------------- */PRIVATE int HTReader_flush (HTInputStream * me){    HTNet * net = HTHost_getReadNet(me->host);    return net && net->readStream ? (*net->readStream->isa->flush)(net->readStream) : HT_OK;}PRIVATE int HTReader_free (HTInputStream * me){    HTNet * net = HTHost_getReadNet(me->host);    if (net && net->readStream) {	int status = (*net->readStream->isa->_free)(net->readStream);        if (status == HT_OK) net->readStream = NULL;	return status;    }    return HT_OK;}PRIVATE int HTReader_abort (HTInputStream * me, HTList * e){    HTNet * net = HTHost_getReadNet(me->host);    if (net && net->readStream) {	int status = (*net->readStream->isa->abort)(net->readStream, NULL);	if (status != HT_IGNORE) net->readStream = NULL;    }    return HT_ERROR;}#ifdef FIND_SIGNATURES/*	Push data from a socket down a stream**	-------------------------------------****   This routine is responsible for creating and PRESENTING any**   graphic (or other) objects described by the file. As this function**   max reads a chunk of data on size INPUT_BUFFER_SIZE, it can be used**   with both blocking or non-blocking sockets. It will always return to**   the event loop, however if we are using blocking I/O then we get a full**   buffer read, otherwise we get what's available.**** Returns      HT_LOADED	if finished reading**		HT_OK		if OK, but more to read**	      	HT_ERROR	if error,**     		HT_WOULD_BLOCK	if read or write would block**		HT_PAUSE	if stream is paused*/PRIVATE char * strnstr(char * haystack, int *pLen, char * needle){    int found = 0;    int need = strlen(needle);    int i, start;    for (start = i = 0; i < *pLen; i++)	if (haystack[i] == needle[found]) {	    if (++found == need) {		i -= need - 1; /* beginning of string */		*pLen -= i;		return haystack+i;	    }	} else {	    found = 0;	}    *pLen = 0;    return NULL;}#endif /* FIND_SIGNATURES */PRIVATE int HTReader_read (HTInputStream * me){    HTHost * host = me->host;    SOCKET soc = HTChannel_socket(me->ch);    HTNet * net = HTHost_getReadNet(host);    HTRequest * request = HTNet_request(net);    int status;    if (!net->readStream) {	HTTRACE(STREAM_TRACE, "Read Socket. No read stream for net object %p\n" _ net);        return HT_ERROR;    }            /* Read from socket if we got rid of all the data previously read */    do {	/* don't read if we have to push unwritten data from last call */	if (me->write >= me->read) {	    if ((me->b_read = NETREAD(soc, me->data, INPUT_BUFFER_SIZE)) < 0) {#ifdef EAGAIN		if (socerrno==EAGAIN || socerrno==EWOULDBLOCK)      /* POSIX */#else		if (socerrno==EWOULDBLOCK) 			      /* BSD */#endif			{		    HTTRACE(STREAM_TRACE, "Read Socket. WOULD BLOCK fd %d\n" _ soc);		    HTHost_register(host, net, HTEvent_READ);		    return HT_WOULD_BLOCK;#ifdef __svr4__		    /* 		    ** In Solaris envirnoment, SIGPOLL is used to signal end 		    ** of buffer for /dev/audio.  If your process is also doing		    ** a socket read, it will cause an EINTR error.  This 		    ** error will cause the www library request to 		    ** terminate prematurly.		    */                } else if (socerrno == EINTR) {                    continue;#endif /* __svr4__ */#ifdef EPIPE		} else if (socerrno == EPIPE) {		    HTTRACE(STREAM_TRACE, "Read Socket. got EPIPE\n" _ soc);		    goto socketClosed;#endif /* EPIPE */#ifdef ECONNRESET		} else if (socerrno == ECONNRESET) {		    HTTRACE(STREAM_TRACE, "Read Socket. got ECONNRESET\n" _ soc);		    goto socketClosed;#endif /* ECONNRESET */#ifdef _WINSOCKAPI_					/* windows */		    /* 		    ** JK: added new tests here, based on the following text:		    ** Under BSD Unixes, if the remote peer closes its 		    ** connection and your program is blocking on recv(), you		    ** will get a 0 back from recv(). Winsock behaves the same		    ** way, except that it can also return -1, with 		    ** WSAGetLastError() returning WSAECONNRESET, 		    ** WSAECONNABORTED or WSAESHUTDOWN, to signal the		    ** detectable flavors of abnormal disconnections.		    ** (from the Winsock Programmer's FAQ, Warren Young)		    */		} else if (socerrno == ECONNABORTED) {		    HTTRACE(STREAM_TRACE, "Read Socket. got ECONNABORTED\n" _ soc);		    goto socketClosed;		} else if (socerrno == ESHUTDOWN) {		    HTTRACE(STREAM_TRACE, "Read Socket. got ESHUTDOWN\n" _ soc);		    goto socketClosed;#endif /* _WINSOCKAPI */		} else { 			     /* We have a real error */		    if (request)			HTRequest_addSystemError(request, ERR_FATAL, socerrno,						 NO, "NETREAD");		    return HT_ERROR;		}	    } else if (!me->b_read) {	    socketClosed:		HTTRACE(STREAM_TRACE, "Read Socket. FIN received on socket %d\n" _ soc);		HTHost_unregister(host, net, HTEvent_READ);		HTHost_register(host, net, HTEvent_CLOSE);		return HT_CLOSED;	    }	    /* Remember how much we have read from the input socket */	    HTTRACEDATA(me->data, me->b_read, "Reading from socket %d" _ soc);	    me->write = me->data;	    me->read = me->data + me->b_read;#ifdef FIND_SIGNATURES	    {		char * ptr = me->data;		int len = me->b_read;		while ((ptr = strnstr(ptr, &len, "HTTP/1.1 200 OK")) != NULL) {		    HTTRACE(STREAM_TRACE, "Read Socket. Signature found at 0x%x of 0x%x.\n" _ ptr - me->data _ me->b_read);		    ptr++;		    len--;		}	    }#endif /* FIND_SIGNATURES */#ifdef NOT_ASCII	    {		char *p = me->data;		while (p < me->read) {		    *p = FROMASCII(*p);		    p++;		}	    }#endif /* NOT_ASCII */	    HTTRACE(STREAM_TRACE, "Read Socket. %d bytes read from socket %d\n" _ 			me->b_read _ soc);	    if (request) {		HTAlertCallback * cbf = HTAlert_find(HT_PROG_READ);		if (HTNet_rawBytesCount(net))		    HTNet_addBytesRead(net, me->b_read);		if (cbf) {		    int tr = HTNet_bytesRead(net);		    (*cbf)(request, HT_PROG_READ, HT_MSG_NULL, NULL, &tr, NULL);		}	    }	}	/* Now push the data down the stream */	if ((status = (*net->readStream->isa->put_block)	     (net->readStream, me->write, me->b_read)) != HT_OK) {	    if (status == HT_WOULD_BLOCK) {		HTTRACE(STREAM_TRACE, "Read Socket. Target WOULD BLOCK\n");		HTHost_unregister(host, net, HTEvent_READ);		return HT_WOULD_BLOCK;	    } else if (status == HT_PAUSE) {		HTTRACE(STREAM_TRACE, "Read Socket. Target PAUSED\n");		HTHost_unregister(host, net, HTEvent_READ);		return HT_PAUSE;	    /* CONTINUE code or stream code means data was consumed */	    } else if (status == HT_CONTINUE || status > 0) {		if (status == HT_CONTINUE) {		    HTTRACE(STREAM_TRACE, "Read Socket. CONTINUE\n");		} else		    HTTRACE(STREAM_TRACE, "Read Socket. Target returns %d\n" _ status);/*		me->write = me->read; */		return status;	    } else {				     /* We have a real error */		HTTRACE(STREAM_TRACE, "Read Socket. Target ERROR %d\n" _ status);		return status;	    }	}	me->write = me->read;	{	    int remaining = HTHost_remainingRead(host);	    if (remaining > 0) {		HTTRACE(STREAM_TRACE, "Read Socket. DIDN'T CONSUME %d BYTES: `%s\'\n" _ 			    remaining _ me->read);		HTHost_setConsumed(host, remaining);	    }	}    } while (net->preemptive);    HTHost_register(host, net, HTEvent_READ);    return HT_WOULD_BLOCK;}/***	The difference between the close and the free method is that we don't**	close the connection in the free method - we only call the free method**	of the target stream. That way, we can keep the input stream as long **	as the channel itself.*/PRIVATE int HTReader_close (HTInputStream * me){    int status = HT_OK;    HTNet * net = HTHost_getReadNet(me->host);    if (net && net->readStream) {	if ((status = (*net->readStream->isa->_free)(net->readStream))==HT_WOULD_BLOCK)	    return HT_WOULD_BLOCK;	net->readStream = NULL;    }    HTTRACE(STREAM_TRACE, "Socket read. FREEING....\n");    HT_FREE(me);    return status;}PUBLIC int HTReader_consumed (HTInputStream * me, size_t bytes){    me->write += bytes;    me->b_read -= bytes;    HTHost_setRemainingRead(me->host, me->b_read);    return HT_OK;}PRIVATE const HTInputStreamClass HTReader ={    "SocketReader",    HTReader_flush,    HTReader_free,    HTReader_abort,    HTReader_read,    HTReader_close,    HTReader_consumed}; /***	Create a new input read stream. Before we actually create it we check**	to see whether we already have an input stream for this channel and if**	so we just return that. This means that we can reuse input streams **	in persistent connections, for example.*/PUBLIC HTInputStream * HTReader_new (HTHost * host, HTChannel * ch,				     void * param, int mode){    if (host && ch) {	HTInputStream * me = HTChannel_input(ch);	if (me == NULL) {	    if ((me=(HTInputStream *) HT_CALLOC(1, sizeof(HTInputStream))) == NULL)	    HT_OUTOFMEM("HTReader_new");	    me->isa = &HTReader;	    me->ch = ch;	    me->host = host;	    HTTRACE(STREAM_TRACE, "Reader...... Created reader stream %p\n" _ me);	}	return me;    }    return NULL;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区中文在线| 伊人一区二区三区| 亚洲综合视频在线| 精品在线观看视频| 欧美三区在线视频| 久久精品欧美日韩精品 | 日韩福利视频网| 99久久久国产精品| 久久天堂av综合合色蜜桃网| 亚洲最大成人网4388xx| 成人激情动漫在线观看| 欧美变态凌虐bdsm| 亚洲国产精品尤物yw在线观看| 成人免费视频免费观看| 精品国产精品网麻豆系列| 亚洲成人福利片| 91麻豆123| 亚洲人成影院在线观看| 成人午夜视频网站| 国产欧美一二三区| 国产乱码精品一区二区三区av | 视频一区视频二区中文| 色婷婷综合五月| 亚洲人123区| 一本大道久久a久久综合婷婷| 中文在线资源观看网站视频免费不卡| 激情亚洲综合在线| 亚洲精品一区二区三区影院| 三级久久三级久久久| 欧美精品1区2区3区| 午夜国产精品一区| 337p亚洲精品色噜噜| 日本亚洲一区二区| 欧美不卡一区二区三区| 久久国产福利国产秒拍| 精品国产伦一区二区三区观看方式| 免费久久精品视频| 日韩精品一区二区在线| 国模无码大尺度一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产成人精品网址| 亚洲人成网站精品片在线观看| 色狠狠桃花综合| 日韩av中文字幕一区二区| 日韩视频永久免费| 国产精品1024久久| 亚洲欧美日韩精品久久久久| 欧美日韩免费电影| 极品少妇xxxx精品少妇偷拍| 国产欧美精品区一区二区三区 | 不卡av免费在线观看| 自拍偷拍亚洲欧美日韩| 欧美日韩免费电影| 精品在线观看视频| 亚洲欧洲另类国产综合| 欧美日韩国产综合久久| 麻豆一区二区三| 国产精品国产自产拍高清av王其 | 成人性生交大合| 亚洲精品成a人| 日韩欧美中文字幕制服| 成人黄色一级视频| 亚洲成av人影院| 久久色在线观看| 欧美亚洲动漫制服丝袜| 精品无人区卡一卡二卡三乱码免费卡 | 91免费在线看| 蜜臀av性久久久久蜜臀aⅴ | 精品盗摄一区二区三区| 成人一区二区三区视频在线观看| 亚洲一区二区三区影院| 欧美精品一区二区久久婷婷 | 亚洲国产精品久久人人爱蜜臀| 欧美一区二区在线免费观看| av一区二区三区黑人| 日韩中文字幕亚洲一区二区va在线| 久久久99精品久久| 欧美日韩国产综合一区二区 | 亚洲精品视频免费看| 日韩三级伦理片妻子的秘密按摩| 99久久99久久综合| 国产美女在线精品| 日韩精品一级二级| 亚洲欧美福利一区二区| 久久久久高清精品| 51精品国自产在线| 色综合天天天天做夜夜夜夜做| 激情综合五月天| 日韩精品色哟哟| 亚洲精品ww久久久久久p站| 久久久精品日韩欧美| 日韩亚洲欧美高清| 欧美日韩一区中文字幕| 北条麻妃国产九九精品视频| 国内精品免费**视频| 日本在线不卡一区| 亚洲成人av福利| 亚洲欧美欧美一区二区三区| 久久精品亚洲麻豆av一区二区 | 国产精品乡下勾搭老头1| 日本不卡一区二区三区| 亚洲成人1区2区| 玉米视频成人免费看| 亚洲欧美一区二区三区久本道91| 国产精品久久久久久久浪潮网站| 久久婷婷色综合| 欧美精品一区二区三区蜜臀| 日韩欧美自拍偷拍| 精品盗摄一区二区三区| 2023国产精华国产精品| 精品伦理精品一区| 精品国产乱码久久久久久夜甘婷婷 | 日韩美女视频在线| 欧美一区永久视频免费观看| 欧美一区二区在线视频| 日韩欧美黄色影院| 欧美大片在线观看一区| 精品久久久影院| 久久久久久夜精品精品免费| 中文av一区特黄| 亚洲天堂网中文字| 夜夜精品浪潮av一区二区三区| 亚洲永久免费视频| 亚洲bt欧美bt精品| 麻豆精品久久久| 国产一区二区三区免费观看| 国产在线精品免费av| 成人一道本在线| 91女人视频在线观看| 欧美性受极品xxxx喷水| 91精品免费在线观看| xf在线a精品一区二区视频网站| 国产色综合久久| 一区二区视频免费在线观看| 午夜精品久久久久久久久久| 久久机这里只有精品| 成人性生交大片免费看中文网站| 91在线码无精品| 在线不卡的av| 中文字幕av一区二区三区| 亚洲黄色免费网站| 久草中文综合在线| 99热99精品| 日韩视频在线观看一区二区| 国产精品久久久久一区二区三区| 亚洲一区二区在线免费看| 精品一区二区免费在线观看| 91啪九色porn原创视频在线观看| 3d动漫精品啪啪一区二区竹菊| 久久久九九九九| 五月天网站亚洲| 成人美女视频在线观看18| 欧美日韩精品免费| 国产精品理论在线观看| 日本aⅴ精品一区二区三区| av一本久道久久综合久久鬼色| 日韩一区二区在线观看| 综合电影一区二区三区| 精品一区二区三区久久久| 色综合av在线| 久久久99精品免费观看| 日韩高清不卡在线| 色综合久久久久综合体桃花网| 精品国产免费人成在线观看| 亚洲国产中文字幕在线视频综合 | 中文字幕中文乱码欧美一区二区 | 精品理论电影在线| 亚洲一区二区不卡免费| 成人综合日日夜夜| 日韩欧美一级二级三级| 亚洲一区在线视频观看| 成人毛片在线观看| 久久久久国产一区二区三区四区| 日本人妖一区二区| 欧洲精品一区二区三区在线观看| 国产欧美日韩精品在线| 美女精品自拍一二三四| 欧美美女一区二区在线观看| 亚洲人成人一区二区在线观看| 成人一二三区视频| 国产午夜亚洲精品不卡| 韩国三级中文字幕hd久久精品| 91精品在线一区二区| 亚洲一区二区三区国产| 91丨porny丨最新| 国产精品久久久久一区二区三区共| 久草精品在线观看| 日韩三级免费观看| 日韩av高清在线观看| 欧美精品久久99| 日韩精品电影在线| 欧美男同性恋视频网站| 亚洲第一综合色| 欧美伦理影视网| 奇米影视一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 亚洲444eee在线观看| 91精品国产乱| 国产自产2019最新不卡| 国产日韩欧美综合一区|