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

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

?? htdns.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/*									HTDNS.c**	DOMAIN NAME SERVICE MANAGER****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTDNS.c,v 2.32 2002/03/21 13:42:01 kahan Exp $****	This object manages a cache of hosts we have looked up vis DNS.**	The object contains the necessary parts from hostent. For Internet host**	hostent->h_addr_list is not an array of char pointers but an array of **	pointers of type in_addr.****	13 Sep 95  HFN	Spawned from HTTCP.c and rewritten*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "HTParse.h"#include "HTAlert.h"#include "HTError.h"#include "HTTrans.h"#include "HTHstMan.h"#include "HTDNS.h"					 /* Implemented here */#define DNS_TIMEOUT		1800L	     /* Default DNS timeout is 30 mn *//* Type definitions and global variables etc. local to this module */struct _HTdns {    char *  		hostname;			     /* name of host */    time_t		ntime;				    /* Creation time */    int			addrlength;	       /* Length of address in bytes */    int			homes;	       /* Number of IP addresses on the host */    char **		addrlist;      /* List of addresses from name server */    double *		weight;			   /* Weight on each address */};PRIVATE HTList	**CacheTable = NULL;PRIVATE time_t	DNSTimeout = DNS_TIMEOUT;	   /* Timeout on DNS entries *//* ------------------------------------------------------------------------- */PRIVATE void free_object (HTdns * me){    if (me) {	HT_FREE(me->hostname);	if (*me->addrlist)	    HT_FREE(*me->addrlist);	HT_FREE(me->addrlist);	HT_FREE(me->weight);	HT_FREE(me);    }}PRIVATE BOOL delete_object (HTList * list, HTdns * me){    HTTRACE(PROT_TRACE, "DNS Delete.. object %p from list %p\n" _ me _ list);    HTList_removeObject(list, (void *) me);    free_object(me);    return YES;}/*	HTDNS_setTimeout**	----------------**	Set the cache timeout for DNS entries. Default is DNS_TIMEOUT*/PUBLIC void HTDNS_setTimeout (time_t timeout){    DNSTimeout = timeout;}/*	HTDNS_timeout**	-------------**	Get the cache timeout */PUBLIC time_t HTDNS_timeout (time_t timeout){    return DNSTimeout;}/*	HTDNS_add**	---------**	Add an element to the cache of visited hosts. Note that this function**	requires the system implemented structure hostent and not our own**	host_info. The homes variable indicates the number of IP addresses **	found. A host name must NOT contain a port number.**	Returns address of new HTdns object*/PUBLIC HTdns * HTDNS_add (HTList * list, struct hostent * element,			  char *host, int *homes){    HTdns *me;    char *addr = NULL;    char **index = element->h_addr_list;    int cnt = 1;    while(*index++) cnt++;    if ((me = (HTdns *) HT_CALLOC(1, sizeof(HTdns))) == NULL ||	(me->addrlist = (char **) HT_CALLOC(1, cnt*sizeof(char*))) == NULL ||	(addr = (char *) HT_CALLOC(1, cnt*element->h_length)) == NULL)	HT_OUTOFMEM("HTDNS_add");    StrAllocCopy(me->hostname, host);    me->ntime = time(NULL);    index = element->h_addr_list;    cnt = 0;    while (*index) {	*(me->addrlist+cnt) = addr+cnt*element->h_length;	memcpy((void *) *(me->addrlist+cnt++), *index++, element->h_length);    }    me->homes = cnt;    *homes = cnt;    if ((me->weight = (double *) HT_CALLOC(me->homes, sizeof(double))) == NULL)        HT_OUTOFMEM("HTDNS_add");    me->addrlength = element->h_length;    HTTRACE(PROT_TRACE, "DNS Add..... `%s\' with %d home(s) to %p\n" _ 		host _ *homes _ list);    HTList_addObject(list, (void *) me);    return me;}/*	HTDNS_updateWeights**	-------------------**	This function calculates the weights of the different IP addresses**	on a multi homed host. Each weight is calculated as****		w(n+1) = w(n)*a + (1-a) * deltatime**		a = exp(-1/Neff)**		Neff is the effective number of samples used**		deltatime is time spend on making a connection****	A short window (low Neff) gives a high sensibility, but this is**	required as we can't expect a lot of data to test on.**	"current" is the index returned by HTGetHostByName()*/PUBLIC BOOL HTDNS_updateWeigths(HTdns *dns, int current, ms_t deltatime){    if (dns) {	int cnt;	const double passive = 0.9; 	  /* Factor for all passive IP_addrs */#if 0	const int Neff = 3;	const double alpha = exp(-1.0/Neff);#else	const double alpha = 0.716531310574;	/* Doesn't need the math lib */#endif	for (cnt=0; cnt<dns->homes; cnt++) {	    if (cnt == current) {		*(dns->weight+current) = *(dns->weight+current)*alpha + (1.0-alpha)*deltatime;		if (*(dns->weight+current) < 0.0) *(dns->weight+current) = 0.0;	    } else {		*(dns->weight+cnt) = *(dns->weight+cnt) * passive;	    }	    HTTRACE(PROT_TRACE, "DNS weight.. Home %d has weight %4.2f\n" _ cnt _ 			*(dns->weight+cnt));	}	return YES;    }    HTTRACE(PROT_TRACE, "DNS weight.. Object %p not found'\n" _ dns);    return NO;}/*	HTDNS_delete**	------------**	Remove an element from the cache*/PUBLIC BOOL HTDNS_delete (const char * host){    HTList *list;    int hash = 0;    const char *ptr;    if (!host || !CacheTable) return NO;    for(ptr=host; *ptr; ptr++)	hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HT_M_HASH_SIZE);    if ((list = CacheTable[hash])) {	 /* We have the list, find the entry */	HTdns *pres;	while ((pres = (HTdns *) HTList_nextObject(list))) {	    if (!strcmp(pres->hostname, host)) {		delete_object(CacheTable[hash], pres);		break;	    }	}    }    return YES;}/*	HTDNS_deleteAll**	---------------**	Destroys the cache completely*/PUBLIC BOOL HTDNS_deleteAll (void){    int cnt;    HTList *cur;    if (!CacheTable) return NO;    for (cnt=0; cnt<HT_M_HASH_SIZE; cnt++) {	if ((cur = CacheTable[cnt])) { 	    HTdns *pres;	    while ((pres = (HTdns *) HTList_nextObject(cur)) != NULL)		free_object(pres);	}	HTList_delete(CacheTable[cnt]);	CacheTable[cnt] = NULL;    }    HT_FREE(CacheTable);    return YES;}/*	HTGetHostByName**	---------------**	Resolve the host name using internal DNS cache. As we want to refer   **	a specific host when timing the connection the weight function must**	use the 'current' value as returned.**      Returns:**	       	>0	Number of homes**		-1	Error*/PUBLIC int HTGetHostByName (HTHost * host, char *hostname, HTRequest* request){    SockA *sin = HTHost_getSockAddr(host);    int homes = -1;    HTList *list;				    /* Current list in cache */    HTdns *pres = NULL;    if (!host || !hostname) {	HTTRACE(PROT_TRACE, "HostByName.. Bad argument\n");	return -1;    }    HTHost_setHome(host, 0);        /* Find a hash for this host */    {	int hash = 0;	char *ptr;	for(ptr=hostname; *ptr; ptr++)	    hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HT_M_HASH_SIZE);	if (!CacheTable) {	    if ((CacheTable = (HTList* *) HT_CALLOC(HT_M_HASH_SIZE, sizeof(HTList *))) == NULL)	        HT_OUTOFMEM("HTDNS_init");	}	if (!CacheTable[hash]) CacheTable[hash] = HTList_new();	list = CacheTable[hash];    }    /* Search the cache */    {	HTList *cur = list;	while ((pres = (HTdns *) HTList_nextObject(cur))) {	    if (!strcmp(pres->hostname, hostname)) {		if (time(NULL) > pres->ntime + DNSTimeout) {		    HTTRACE(PROT_TRACE, "HostByName.. Refreshing cache\n");		    delete_object(list, pres);		    pres = NULL;		}		break;	    }	}    }    if (pres) {	/*	** Find the best home. We still want to do this as we use it as a	** fall back for persistent connections	*/	homes = pres->homes;	if (pres->homes > 1) {	    int cnt = 0;	    double best_weight = 1e30;			      /* Pretty bad */	    while (cnt < pres->homes) {		if (*(pres->weight+cnt) < best_weight) {		    best_weight = *(pres->weight+cnt);		    HTHost_setHome(host, cnt);		}		cnt++;	    }	}	host->dns = pres;	memcpy((void *) &sin->sin_addr, *(pres->addrlist+HTHost_home(host)),	       pres->addrlength);    } else {	struct hostent *hostelement;			      /* see netdb.h */	HTAlertCallback *cbf = HTAlert_find(HT_PROG_DNS);#ifdef HT_REENTRANT	int thd_errno;	char buffer[HOSTENT_MAX];	struct hostent result;			      /* For gethostbyname_r */#endif#ifdef HAVE_GETHOSTBYNAME_R_3        struct hostent_data hdata;#endif	if (cbf) (*cbf)(request, HT_PROG_DNS, HT_MSG_NULL,NULL,hostname,NULL);#ifdef HAVE_GETHOSTBYNAME_R_5	hostelement = gethostbyname_r(hostname, &result, buffer,				      HOSTENT_MAX, &thd_errno);#elif defined(HAVE_GETHOSTBYNAME_R_6)	gethostbyname_r(hostname, &result, buffer,		        HOSTENT_MAX, &hostelement, &thd_errno);#elif defined(HAVE_GETHOSTBYNAME_R_3)        if (gethostbyname_r(hostname, &result, &hdata) == 0) {	    hostelement = &result;	}	else {	    hostelement = NULL;	}#else	if (cbf) (*cbf)(request, HT_PROG_DNS, HT_MSG_NULL,NULL,hostname,NULL);	hostelement = gethostbyname(hostname);#endif	if (!hostelement) {            HTRequest_addSystemError(request, ERR_FATAL, socerrno, NO,   			             "gethostbyname");	    return -1;	}		host->dns = HTDNS_add(list, hostelement, hostname, &homes);	memcpy((void *) &sin->sin_addr, *hostelement->h_addr_list,	       hostelement->h_length);    }    return homes;}/***	Get host name of the machine on the other end of a socket.***/PUBLIC char * HTGetHostBySock (int soc){    struct sockaddr addr;    int len = sizeof(struct sockaddr);    struct in_addr *iaddr;    char *name = NULL;    struct hostent * phost;		/* Pointer to host -- See netdb.h */#ifdef HT_REENTRANT    int thd_errno;    char buffer[HOSTENT_MAX];    struct hostent result;		      	      /* For gethostbyaddr_r */#endif#ifdef HAVE_GETHOSTBYADDR_R_5    struct hostent_data hdata;#endif#ifdef DECNET  /* Decnet ain't got no damn name server 8#OO */    return NULL;#else    if (getpeername(soc, &addr, &len) < 0)	return NULL;    iaddr = &(((struct sockaddr_in *)&addr)->sin_addr);#ifdef HAVE_GETHOSTBYADDR_R_7    phost = gethostbyaddr_r((char *) iaddr, sizeof(struct in_addr), AF_INET,			    &result, buffer, HOSTENT_MAX, &thd_errno);#elif defined(HAVE_GETHOSTBYADDR_R_8)    gethostbyaddr_r((char *) iaddr, sizeof(struct in_addr), AF_INET,		    &result, buffer, HOSTENT_MAX, &phost, &thd_errno);#elif defined(HAVE_GETHOSTBYADDR_R_5)    if(gethostbyaddr_r((char *) iaddr, sizeof(struct in_addr), AF_INET,		       &result, &hdata)==0) {	phost=&result;    }    else {	phost = NULL;    }#else    phost = gethostbyaddr((char *) iaddr, sizeof(struct in_addr), AF_INET);#endif    if (!phost) {	HTTRACE(PROT_TRACE, "TCP......... Can't find internet node name for peer!!\n");	return NULL;    }    StrAllocCopy(name, phost->h_name);    HTTRACE(PROT_TRACE, "TCP......... Peer name is `%s'\n" _ name);    return name;#endif	/* not DECNET */}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天影视涩香欲综合网| 日本成人在线网站| 日韩一二三四区| 成人小视频在线| 老司机午夜精品| 一区二区三区四区亚洲| 久久综合久色欧美综合狠狠| 97se亚洲国产综合自在线| 久久99精品国产.久久久久久| 一区二区久久久久久| 国产精品久久久久一区| 精品福利视频一区二区三区| 欧美丝袜自拍制服另类| 成人免费视频app| 激情六月婷婷久久| 美女精品一区二区| 三级成人在线视频| 洋洋av久久久久久久一区| 国产精品久久午夜| 久久久99精品久久| 久久综合久久综合久久综合| 日韩午夜av电影| 在线播放视频一区| 欧美日韩一区二区三区视频| 色先锋资源久久综合| youjizz久久| 床上的激情91.| 丁香一区二区三区| 国产成人精品aa毛片| 国产一区中文字幕| 国产精品一区二区黑丝| 精品亚洲免费视频| 精品一区二区免费| 国内精品国产成人国产三级粉色 | 不卡影院免费观看| 国产成a人亚洲| 国产成人亚洲综合a∨婷婷| 国模一区二区三区白浆| 久久9热精品视频| 久久99最新地址| 国产精品123| 国产传媒欧美日韩成人| 福利电影一区二区| jlzzjlzz欧美大全| 91理论电影在线观看| 一本色道a无线码一区v| 91福利精品第一导航| 欧美综合在线视频| 欧美高清视频在线高清观看mv色露露十八 | 日韩国产一区二| 日韩黄色小视频| 裸体一区二区三区| 国产精品一区二区三区乱码 | 国产精品1区2区3区在线观看| 国产老肥熟一区二区三区| 国产成人精品影视| 9i看片成人免费高清| 日本高清不卡aⅴ免费网站| 欧美视频精品在线| 精品欧美黑人一区二区三区| 久久久精品综合| 综合婷婷亚洲小说| 偷拍自拍另类欧美| 国产乱国产乱300精品| 波多野结衣欧美| 欧美在线观看视频在线| 一区二区三区自拍| 日韩av中文字幕一区二区| 国产一区二区美女| 91麻豆精东视频| 欧美精品亚洲二区| 国产婷婷色一区二区三区四区| 亚洲四区在线观看| 奇米影视一区二区三区| 成人中文字幕合集| 欧美久久一二三四区| 久久亚洲一级片| 一区二区三区日本| 国产一区二区三区四 | 日韩欧美国产三级| 亚洲国产精品成人综合色在线婷婷| 自拍偷拍亚洲欧美日韩| 免费在线观看一区二区三区| 成人18视频在线播放| 欧美日韩不卡在线| 国产精品免费视频网站| 日韩电影在线免费看| 国产成人精品亚洲午夜麻豆| 欧美日韩在线亚洲一区蜜芽| 国产亚洲午夜高清国产拍精品| 一区二区在线观看免费| 激情综合色综合久久综合| 在线一区二区观看| 久久久精品影视| 日本成人中文字幕在线视频| 97精品电影院| 精品一区二区免费视频| 色网站国产精品| 久久精品一区二区三区不卡牛牛| 亚洲国产一区二区视频| 成人一道本在线| 精品久久久久99| 性久久久久久久| 91视频观看视频| 国产校园另类小说区| 青青青爽久久午夜综合久久午夜| 91麻豆自制传媒国产之光| 久久先锋资源网| 日本欧美一区二区在线观看| 欧日韩精品视频| 亚洲色图欧洲色图| 岛国精品一区二区| 国产婷婷色一区二区三区四区| 青青草国产成人av片免费| 欧美亚洲国产一区在线观看网站| 久久精品亚洲麻豆av一区二区 | 正在播放亚洲一区| 亚洲二区在线观看| 99久久er热在这里只有精品15| 久久综合九色综合欧美98| 免费在线看成人av| 91精品国产乱码| 天天免费综合色| 欧美日韩在线直播| 午夜久久电影网| 欧美日韩国产一级| 亚洲国产精品久久久久婷婷884 | 欧美一区二区三区成人| 亚洲成人一二三| 在线观看网站黄不卡| 亚洲日本va在线观看| 91欧美一区二区| 亚洲精品视频在线看| 色综合天天综合| 亚洲激情自拍偷拍| 在线观看一区不卡| 视频一区欧美精品| 欧美一区二区三区的| 久久www免费人成看片高清| 欧美一级二级三级乱码| 久久精品国产第一区二区三区| 91精品国产91久久综合桃花| 三级欧美韩日大片在线看| 欧美一区二区成人| 精品制服美女丁香| 国产亚洲自拍一区| 99麻豆久久久国产精品免费| 亚洲欧美偷拍三级| 在线精品观看国产| 视频精品一区二区| 日韩精品一区二区三区老鸭窝| 国产美女久久久久| 国产精品久久二区二区| 99精品视频在线观看免费| 亚洲精品网站在线观看| 欧美三级韩国三级日本一级| 蜜桃av噜噜一区| 欧美精品一区二区三区高清aⅴ| 国产成人综合网| 亚洲欧美精品午睡沙发| 欧美美女视频在线观看| 美女免费视频一区二区| 欧美国产综合一区二区| 日本电影欧美片| 日本在线不卡一区| 国产女主播在线一区二区| 一本久道久久综合中文字幕| 午夜成人在线视频| 久久久国产一区二区三区四区小说| 99久久精品免费看| 免费日韩伦理电影| 国产精品久久久久久久久果冻传媒| 欧美在线视频全部完| 久久精品国产免费看久久精品| 国产精品第一页第二页第三页| 欧美少妇xxx| 国产成人av网站| 午夜精品久久久久| 国产欧美一区二区精品忘忧草| 欧洲一区在线电影| 国产一区二区三区综合 | 国产精品一区二区久久不卡 | 国产精品伦一区| 91精品国产福利| 91蜜桃视频在线| 九一九一国产精品| 亚洲一区二区三区三| 久久久久久9999| 欧美精品免费视频| 91在线视频播放| 国产一区久久久| 午夜精品在线看| 亚洲视频每日更新| 久久影院午夜论| 欧美三级视频在线播放| 成人av影院在线| 韩国一区二区三区| 无吗不卡中文字幕| 亚洲精品乱码久久久久久黑人| 久久嫩草精品久久久久|