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

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

?? htevtlst.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*				    				     HTEvtLst.c**	EVENT MANAGER****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTEvtLst.c,v 2.45 2000/08/02 10:38:07 kahan Exp $****	Updated HTEvent module **	This new module combines the functions of the old HTEvent module and **	the HTThread module. We retain the old HTThread module, but it**	consists of calls to the HTEvent interfaces**** Authors:**	HFN	Henrik Frystyk <frystyk@w3.org>**	CLB    	Charlie Brooks <cbrooks@osf.org>** Bugs***//*   WSAAsyncSelect and windows app stuff need the following definitions: *   WWW_WIN_ASYNC - enable WSAAsyncSelect instead of select *   _WIN23 - win32 libararies - may be window or console app *   _WINSOCKAPI_ - using WINSOCK.DLL - not necessarily the async routines. *   _CONSOLE - the console app for NT * * first pass: EGP - 10/26/95 *//* Implementation dependent include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTReqMan.h"#include "HTTimer.h"#include "HTEvent.h"#include "HTEvtLst.h"					 /* Implemented here *//* Type definitions and global variables etc. local to this module */#define MILLI_PER_SECOND	1000#define HASH(s)			((s) % HT_M_HASH_SIZE) #define EVENTS_TO_EXECUTE	10 /* how many to execute in one select loop */#define HT_FS_BYTES(a)		((((a)/16)+1) * 4)typedef struct {    SOCKET 	s ;	 		/* our socket */    HTEvent * 	events[HTEvent_TYPES];	/* event parameters for read, write, oob */    HTTimer *	timeouts[HTEvent_TYPES];} SockEvents;typedef struct {    HTEvent *	event;    SOCKET	s;    HTEventType	type;    HTPriority	skipped;} EventOrder;typedef enum {    SockEvents_mayCreate,    SockEvents_find} SockEvents_action;PRIVATE HTList * HashTable [HT_M_HASH_SIZE]; PRIVATE HTList * EventOrderList = NULL;PRIVATE int HTEndLoop = 0;		       /* If !0 then exit event loop */PRIVATE BOOL HTInLoop = NO;#ifdef WWW_WIN_ASYNC#define TIMEOUT	1 /* WM_TIMER id */PRIVATE HWND HTSocketWin;PRIVATE ATOM HTclass;PRIVATE HINSTANCE HTinstance;PRIVATE unsigned long HTwinMsg;#else /* WWW_WIN_ASYNC */PRIVATE fd_set FdArray[HTEvent_TYPES];PRIVATE SOCKET MaxSock = 0;			  /* max socket value in use */#endif /* !WWW_WIN_ASYNC *//* ------------------------------------------------------------------------- *//* 				DEBUG FUNCTIONS	    		             *//* ------------------------------------------------------------------------- */#ifdef HTDEBUGPRIVATE void Event_trace (HTEvent * event){    if (event) {	HTTRACE(ALL_TRACE, "%8p: %3d %6d %8p %8p %8p" _		event _ event->priority _ event->millis _ event->cbf _		event->param _ event->request);    }}PRIVATE void Event_traceHead (void){    HTTRACE(ALL_TRACE, "     event: pri millis  callback   param    request  ");}PRIVATE void Timer_trace (HTTimer * timer){    if (timer) {	HTTRACE(ALL_TRACE, "%8p: %6d %ld %c %8p" _		timer _		HTTimer_expiresAbsolute(timer) _		HTTimer_expiresRelative(timer) _		HTTimer_isRelative(timer) ? 'R' : 'A' _		HTTimer_callback(timer));    }}PRIVATE void Timer_traceHead (void){    HTTRACE(ALL_TRACE, "     timer: millis expires ?   param   callback  ");}/***  A simple debug function that dumps all the socket arrays**  as trace messages*/PRIVATE void EventList_dump (void){    int v = 0;    HTList* cur;    SockEvents * pres;    HTTRACE(ALL_TRACE, "Event....... Dumping socket events\n");    HTTRACE(ALL_TRACE, "soc ");    Event_traceHead();    HTTRACE(ALL_TRACE, " ");    Timer_traceHead();    HTTRACE(ALL_TRACE, "\n");    for (v = 0; v < HT_M_HASH_SIZE; v++) {	cur = HashTable[v];	while ((pres = (SockEvents *) HTList_nextObject(cur))) {	    int i;	    HTTRACE(ALL_TRACE, "%3d \n" _ pres->s);	    for (i = 0; i < HTEvent_TYPES; i++)		if (pres->events[i]) {		    static char * names[HTEvent_TYPES] = {"read", "writ", "xcpt"};		    HTTRACE(ALL_TRACE, "%s " _ names[i]);		    Event_trace(pres->events[i]);		    HTTRACE(ALL_TRACE, " ");		    Timer_trace(pres->timeouts[i]);		    HTTRACE(ALL_TRACE, " ");		}	    HTTRACE(ALL_TRACE, "\n");	}    }}PRIVATE void fd_dump (SOCKET maxfs, fd_set * rset, fd_set * wset, fd_set * oset, 		      struct timeval * wt){    SOCKET cnt;    /* Check read set */    HTTRACE(THD_TRACE, "............ READ :");    for (cnt=0; cnt<=maxfs; cnt++)	if (FD_ISSET(cnt, rset)) HTTRACE(THD_TRACE, " %d" _ cnt);    HTTRACE(THD_TRACE, "\n");    /* Check write set */    HTTRACE(THD_TRACE, "............ WRITE:");    for (cnt=0; cnt<=maxfs; cnt++)	if (FD_ISSET(cnt, wset)) HTTRACE(THD_TRACE, " %d" _ cnt);    HTTRACE(THD_TRACE, "\n");    /* Check oob set */    HTTRACE(THD_TRACE, "............ OOB  :");    for (cnt=0; cnt<=maxfs; cnt++)	if (FD_ISSET(cnt, oset)) HTTRACE(THD_TRACE, " %d" _ cnt);    HTTRACE(THD_TRACE, "\n");    if (wt)	HTTRACE(THD_TRACE, "............ Timeout is %ld s, %ld microsecs\n" _		wt->tv_sec _ wt->tv_usec);}#endif /* HTDEBUG *//* ------------------------------------------------------------------------- *//*		           EVENT TIMING FUNCTIONS			     *//* ------------------------------------------------------------------------- */#ifdef WWW_WIN_ASYNCPRIVATE BOOL Timer_setWindowsTimer (HTTimer * timer){    UINT id;    HWND hwnd = HTEventList_getWinHandle(&id);    BOOL status = (SetTimer(hwnd, (UINT)timer, (UINT)HTTimer_getTime(timer), NULL) == 0) ? NO : YES;    return status;}PRIVATE BOOL Timer_deleteWindowsTimer (HTTimer * timer){    UINT id;    HWND hwnd = HTEventList_getWinHandle(&id);    BOOL status = (KillTimer(hwnd, (UINT)timer) == 0) ? NO : YES;    return status;}#endif /* WWW_WIN_ASYNC *//***  Event timeout handler**  If an event didn't occur before the timeout then call it explicitly**  indicating that it timed out.*/PRIVATE int EventListTimerHandler (HTTimer * timer, void * param, HTEventType type){    SockEvents * sockp = (SockEvents *) param;    HTEvent * event = NULL;    /* Check for read timeout */    if (sockp->timeouts[HTEvent_INDEX(HTEvent_READ)] == timer) {	event = sockp->events[HTEvent_INDEX(HTEvent_READ)];	HTTRACE(THD_TRACE, "Event....... READ timed out on %d.\n" _ sockp->s);	return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT);    }    /* Check for write timeout */    if (sockp->timeouts[HTEvent_INDEX(HTEvent_WRITE)] == timer) {	event = sockp->events[HTEvent_INDEX(HTEvent_WRITE)];	HTTRACE(THD_TRACE, "Event....... WRITE timed out on %d.\n" _ sockp->s);	return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT);    }    /* Check for out-of-band data timeout */    if (sockp->timeouts[HTEvent_INDEX(HTEvent_OOB)] == timer) {	event = sockp->events[HTEvent_INDEX(HTEvent_OOB)];	HTTRACE(THD_TRACE, "Event....... OOB timed out on %d.\n" _ sockp->s);	return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT);    }    HTTRACE(THD_TRACE, "Event....... No event for timer %p with context %p\n" _ timer _ param);    return HT_ERROR;}PUBLIC void CheckSockEvent (HTTimer * timer, HTTimerCallback * cbf, void * param){    SockEvents * sockp = (SockEvents *)param;    if (cbf == EventListTimerHandler && 	sockp->timeouts[0] != timer && 	sockp->timeouts[1] != timer && 	sockp->timeouts[2] != timer) {	HTDEBUGBREAK("Bad timer %p\n" _ timer);    }}/* ------------------------------------------------------------------------- *//*		             EVENT ORDERING STUFF			     *//* ------------------------------------------------------------------------- */PRIVATE SockEvents * SockEvents_get (SOCKET s, SockEvents_action action){    long v = HASH(s);    HTList* cur;    SockEvents * pres;    /* if the socket doesn't exists, don't do anything */    if (s == INVSOC)      return NULL;    if (HashTable[v] == NULL) HashTable[v] = HTList_new();    cur = HashTable[v];    while ((pres = (SockEvents *) HTList_nextObject(cur)))	if (pres->s == s) return pres;    if (action == SockEvents_mayCreate) {        if ((pres = (SockEvents *) HT_CALLOC(1, sizeof(SockEvents))) == NULL)	    HT_OUTOFMEM("HTEventList_register");	pres->s = s;	HTList_addObject(HashTable[v], (void *)pres);	return pres;    }    return NULL;}PRIVATE int EventOrder_add (SOCKET s, HTEventType type, ms_t now){    EventOrder * pres;    HTList * cur = EventOrderList;    HTList * insertAfter = cur;    SockEvents * sockp = SockEvents_get(s, SockEvents_find);    HTEvent * event;    if (sockp == NULL || (event = sockp->events[HTEvent_INDEX(type)]) == NULL) {	HTTRACE(THD_TRACE, "EventOrder.. no event found for socket %d, type %s.\n" _		s _ HTEvent_type2str(type));	return HT_ERROR;    }    /*	Fixup the timeout */    if (sockp->timeouts[HTEvent_INDEX(type)])	HTTimer_refresh(sockp->timeouts[HTEvent_INDEX(type)], now);    /* Look to see if it's already here from before */    while ((pres = (EventOrder *) HTList_nextObject(cur))) {	if (pres->s == s && pres->event == event && pres->type == type) {	    pres->skipped++;	    return HT_OK;	}	if (pres->event->priority+pres->skipped > event->priority)	    insertAfter = cur;    }    /* Create a new element */    if ((pres = (EventOrder *) HT_CALLOC(1, sizeof(EventOrder))) == NULL)	HT_OUTOFMEM("EventOrder_add");    pres->event = event;    pres->s = s;    pres->type = type;    HTList_addObject(insertAfter, (void *)pres);    return HT_OK;}PUBLIC int EventOrder_executeAndDelete (void) {    HTList * cur = EventOrderList;    EventOrder * pres;    int i = 0;    HTTRACE(THD_TRACE, "EventOrder.. execute ordered events\n");    if (cur == NULL) return NO;    while ((pres=(EventOrder *) HTList_removeLastObject(cur)) && i<EVENTS_TO_EXECUTE) {	HTEvent * event = pres->event;	int ret;	HTTRACE(THD_TRACE, "EventList... calling socket %d, request %p handler %p type %s\n" _ 		    pres->s _ (void *) event->request _ 		    (void *) event->cbf _ HTEvent_type2str(pres->type));	ret = (*pres->event->cbf)(pres->s, pres->event->param, pres->type);	HT_FREE(pres);	if (ret != HT_OK) return ret;	i++;    }    return HT_OK;}PRIVATE BOOL EventOrder_clearAll (void){    HTList * cur = EventOrderList;    EventOrder * pres;    HTTRACE(THD_TRACE, "EventOrder.. Clearing all ordered events\n");    if (cur) {	while ((pres = (EventOrder *) HTList_nextObject(cur)))	    HT_FREE(pres);	return YES;    }    return NO;}PUBLIC BOOL EventOrder_deleteAll (void) {    EventOrder_clearAll();    HTList_delete(EventOrderList);    EventOrderList = NULL;    return YES;}/* ------------------------------------------------------------------------- *//*				EVENT REGISTRATION			     *//* ------------------------------------------------------------------------- *//*** ResetMaxSock - reset the value of the maximum socket in use */#ifndef WWW_WIN_ASYNCPRIVATE void __ResetMaxSock (void){    SOCKET cnt;    SOCKET t_max = 0;    SOCKET old_max = MaxSock;    for (cnt = 0 ; cnt <= MaxSock; cnt++) { 	if (FD_ISSET(cnt, (FdArray + HTEvent_INDEX(HTEvent_READ))) ||	    FD_ISSET(cnt, (FdArray + HTEvent_INDEX(HTEvent_WRITE))) ||	    FD_ISSET(cnt, (FdArray + HTEvent_INDEX(HTEvent_OOB))))  	    if (cnt > t_max) t_max = cnt;    }    MaxSock = t_max+1;    HTTRACE(THD_TRACE, "Event....... Reset MaxSock from %u to %u\n" _ old_max _ MaxSock);    return;}  #endif /* !WWW_WIN_ASYNC */PRIVATE int EventList_remaining (SockEvents * pres){    int ret = 0;    int i;    for (i = 0; i < HTEvent_TYPES; i++)	if (pres->events[i] != NULL)	    ret |= 1<<i;    return ret;}/***  For a given socket, reqister a request structure, a set of operations, **  a HTEventCallback function, and a priority. For this implementation, **  we allow only a single HTEventCallback function for all operations.**  and the priority field is ignored.*/PUBLIC int HTEventList_register (SOCKET s, HTEventType type, HTEvent * event){    int newset = 0;    SockEvents * sockp;    HTTRACE(THD_TRACE, "Event....... Register socket %d, request %p handler %p type %s at priority %d\n" _ 		s _ (void *) event->request _ 		(void *) event->cbf _ HTEvent_type2str(type) _ 		(unsigned) event->priority);    if (s==INVSOC || HTEvent_INDEX(type) >= HTEvent_TYPES)	return 0;    /*    ** Insert socket into appropriate file descriptor set. We also make sure    ** that it is registered in the global set.    */    HTTRACE(THD_TRACE, "Event....... Registering socket for %s\n" _ HTEvent_type2str(type));    sockp = SockEvents_get(s, SockEvents_mayCreate);    sockp->s = s;    sockp->events[HTEvent_INDEX(type)] = event;    newset = EventList_remaining(sockp);#ifdef WWW_WIN_ASYNC    if (WSAAsyncSelect(s, HTSocketWin, HTwinMsg, HTEvent_BITS(newset)) < 0) {        HTTRACE(THD_TRACE, "Event....... WSAAsyncSelect returned `%s'!" _ HTErrnoString(socerrno));	return HT_ERROR;    }#else /* WWW_WIN_ASYNC */    FD_SET(s, FdArray+HTEvent_INDEX(type));    HTTRACEDATA((char *) FdArray+HTEvent_INDEX(type), 8, "HTEventList_register: (s:%d)" _ s);    if (s > MaxSock) {	MaxSock = s ;	HTTRACE(THD_TRACE, "Event....... New value for MaxSock is %d\n" _ MaxSock);    }#endif /* !WWW_WIN_ASYNC */    /*    **  If the timeout has been set (relative in millis) then we register     **  a new timeout for this event unless we already have a timer.    */    if (event->millis >= 0) {	sockp->timeouts[HTEvent_INDEX(type)] =	    HTTimer_new(sockp->timeouts[HTEvent_INDEX(type)],			EventListTimerHandler, sockp, event->millis, YES, YES);    }    return HT_OK;}/*** Remove the registered information for the specified socket for the actions ** specified in ops. if no actions remain after the unregister, the registered** info is deleted, and, if the socket has been registered for notification, ** the HTEventCallback will be invoked.*/PUBLIC int HTEventList_unregister (SOCKET s, HTEventType type) {    long 		v = HASH(s);    HTList * 		cur = HashTable[v];    HTList * 		last = cur;    SockEvents *	pres;    int			ret = HT_ERROR;    /* if the socket doesn't exists, don't do anything */    if (s == INVSOC)      return HT_OK;    while (cur && (pres = (SockEvents *) HTList_nextObject(cur))) {        if (pres->s == s) {	    int	remaining = 0;	    /*	    **  Unregister the event from this action	    */	    pres->events[HTEvent_INDEX(type)] = NULL;            remaining = EventList_remaining(pres);	    /*	    **  Check to see of there was a timeout connected with the event.	    **  If so then delete the timeout as well.	    */	    {		HTTimer * timer = pres->timeouts[HTEvent_INDEX(type)];                if (timer) HTTimer_delete(timer);                pres->timeouts[HTEvent_INDEX(type)] = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看视频一区二区| 亚洲老司机在线| av男人天堂一区| 一区二区三区国产精华| 久久精品国产**网站演员| 美女视频黄a大片欧美| 99久久综合国产精品| 国产成人精品在线看| 91麻豆6部合集magnet| 欧美亚一区二区| 国产亚洲午夜高清国产拍精品 | 欧美一区二区精品在线| 欧美精品一区二区三| 亚洲精品成人精品456| 极品尤物av久久免费看| 日本高清无吗v一区| 久久综合精品国产一区二区三区| 欧美国产日本视频| 日韩精品免费视频人成| 国产乱子轮精品视频| 欧美日韩成人综合在线一区二区| 欧美丝袜丝nylons| 秋霞午夜鲁丝一区二区老狼| 成人午夜在线播放| 亚洲精品高清视频在线观看| 欧美肥胖老妇做爰| 顶级嫩模精品视频在线看| 欧美男同性恋视频网站| 国产精品自在欧美一区| 亚洲男女一区二区三区| 色综合天天综合网国产成人综合天 | 日本美女视频一区二区| 亚洲欧美综合另类在线卡通| 国产亚洲成aⅴ人片在线观看| 粉嫩高潮美女一区二区三区| 51精品国自产在线| 夜夜爽夜夜爽精品视频| 99视频精品免费视频| 国产精品灌醉下药二区| 成人免费观看av| 亚洲精品久久7777| 欧美视频中文字幕| 肉丝袜脚交视频一区二区| 51精品秘密在线观看| 国内精品在线播放| 中文字幕免费一区| 在线观看欧美精品| 热久久一区二区| 国产亚洲精品福利| 91福利在线播放| 日本美女一区二区| 欧美韩国日本综合| 91国产精品成人| 看电视剧不卡顿的网站| 国产午夜亚洲精品羞羞网站| 亚洲图片自拍偷拍| 亚洲精品国产a| 91精品国产一区二区三区| 精品一区二区三区免费观看| 国产精品美女视频| 欧美日韩美少妇| 激情文学综合网| 自拍偷拍国产精品| 制服丝袜av成人在线看| 国产麻豆精品在线观看| 亚洲欧美福利一区二区| 91精品国产麻豆国产自产在线 | 色狠狠av一区二区三区| 午夜久久久久久久久久一区二区| 精品久久久久久无| 色婷婷综合久久久中文字幕| 精品一区二区三区不卡| 亚洲综合久久av| 中文在线免费一区三区高中清不卡| 欧美性猛交xxxx乱大交退制版| 经典三级一区二区| 亚洲影视在线播放| 国产精品五月天| 欧美色爱综合网| 国产一区不卡在线| 日韩国产一二三区| 亚洲欧美日韩系列| 久久久久久久久久久久电影 | 国产三级久久久| 欧美视频精品在线观看| 国产成人亚洲综合a∨婷婷图片| 亚洲午夜av在线| 一色桃子久久精品亚洲| 精品国产一区久久| 欧美乱熟臀69xxxxxx| 色婷婷综合中文久久一本| 成熟亚洲日本毛茸茸凸凹| 另类小说欧美激情| 日日夜夜免费精品视频| 亚洲精品一二三| 国产精品久久久久aaaa樱花| 国产亚洲婷婷免费| 久久亚洲综合色| 精品国精品自拍自在线| 欧美日韩dvd在线观看| 色婷婷精品久久二区二区蜜臂av | 国产一区福利在线| 看电影不卡的网站| 日本成人在线电影网| 午夜一区二区三区视频| 一区二区成人在线| 一区二区三区四区中文字幕| 中文字幕一区二区三中文字幕| 欧美国产日韩在线观看| 久久精品一区二区| 国产色产综合色产在线视频| 国产网站一区二区三区| 2欧美一区二区三区在线观看视频| 日韩视频中午一区| 日韩欧美一区在线| 日韩三级视频在线看| 欧美xxxxx裸体时装秀| 精品国产a毛片| 国产午夜亚洲精品午夜鲁丝片| 国产日韩三级在线| 国产精品欧美久久久久一区二区| 久久久精品免费免费| 国产清纯白嫩初高生在线观看91 | 538在线一区二区精品国产| 欧美精品一卡二卡| 精品福利视频一区二区三区| 久久品道一品道久久精品| 国产色爱av资源综合区| 亚洲欧美国产高清| 视频在线观看一区二区三区| 麻豆精品一区二区三区| 国产成人亚洲综合a∨婷婷| 99久久精品国产导航| 欧美系列在线观看| 日韩视频一区二区| 国产精品视频yy9299一区| 亚洲自拍与偷拍| 久久激情五月婷婷| 99综合电影在线视频| 欧美精品自拍偷拍动漫精品| 精品国产乱码久久久久久夜甘婷婷 | 顶级嫩模精品视频在线看| 久久综合久久鬼色| 中文字幕在线不卡| 亚洲第一主播视频| 国产原创一区二区| 91色婷婷久久久久合中文| 91精品综合久久久久久| 国产精品天干天干在观线| 亚洲亚洲人成综合网络| 极品少妇xxxx精品少妇偷拍| 99国内精品久久| 欧美一区在线视频| 国产精品初高中害羞小美女文| 亚洲第四色夜色| 成人av在线电影| 精品国产sm最大网站| 亚洲国产一二三| 成人精品鲁一区一区二区| 欧美日韩亚州综合| 中文字幕日韩一区| 国产精品夜夜嗨| 欧美另类z0zxhd电影| 亚洲欧美在线高清| 国产一区二区精品在线观看| 欧美日韩一级片网站| 国产精品久久久久久一区二区三区| 视频在线在亚洲| 欧洲人成人精品| 中文字幕在线观看不卡| 九九国产精品视频| 欧美挠脚心视频网站| 亚洲精选视频在线| 成人国产精品免费网站| 欧美精品一区二区在线观看| 午夜天堂影视香蕉久久| 色综合网色综合| 国产精品久久毛片av大全日韩| 激情综合亚洲精品| 日韩欧美一级在线播放| 日本特黄久久久高潮| 91国偷自产一区二区开放时间 | 中文字幕在线不卡视频| 国产精品影视在线观看| 精品少妇一区二区三区日产乱码 | 一本到高清视频免费精品| 久久久久久99精品| 狠狠色综合色综合网络| 日韩一区国产二区欧美三区| 天堂一区二区在线免费观看| 欧美曰成人黄网| 一区二区三区四区五区视频在线观看 | 欧美综合视频在线观看| 亚洲免费av在线| 日本道精品一区二区三区| 一区二区在线观看免费| 91成人国产精品| 亚洲国产日韩一级| 欧美夫妻性生活| 久久精品久久99精品久久|