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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? res_send.c

?? Vxworks 的源代碼 C語言編寫
?? C
字號:
/* res_send.c - *//* Copyright 1984-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * Copyright (c) 1985, 1989 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//*modification history--------------------01c,05nov01,vvv fixed compilation warning; cleaned up use of register01b,04sep01,vvv fixed to correctly query multiple servers (SPR #67238);                fixed compilation warnings01a,13dec96,jag Cleaned up.  Added resolv prefix. Man pages can be found in                files resolvLib.c.  Added code for pdnsDebugFunc.*//* * Send query to name server and wait for reply. */#include <sys/times.h>#include <resolvLib.h>#include <sockLib.h>#include <net/uio.h>#include <unistd.h>#include <string.h>#include "ioLib.h"extern FUNCPTR pdnsDebugFunc;#ifndef FD_SET#define	NFDBITS		32#define	FD_SETSIZE	32#define	FD_SET(n, p)	((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))#define	FD_CLR(n, p)	((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))#define	FD_ISSET(n, p)	((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))#define FD_ZERO(p)	bzero((char *)(p), sizeof(*(p)))#endifint resolvSend(buf, buflen, answer, anslen)	const char *buf;	int buflen;	char *answer;	int anslen;{	int n = 0;	int try, v_circuit, resplen, ns;	int gotsomewhere = 0, connected = 0;	int connreset = 0;	u_short id, len;	char *cp;	fd_set dsmask;	struct timeval timeout;	HEADER *hp = (HEADER *) buf;	HEADER *anhp = (HEADER *) answer;	struct iovec iov[2];	int terrno = ETIMEDOUT;	char junk[512];	int start;      /* pointer to server we start querying with */        int s = -1;	/* socket used for communications */        struct sockaddr no_addr;        bzero ((char*) &no_addr, sizeof no_addr);#ifdef ORG_RESOLVER#ifdef DEBUG	if (_res.options & RES_DEBUG) {		printf("resSend()\n");		__p_query(buf);	}#endif /* DEBUG */#else	if (pdnsDebugFunc != (FUNCPTR) NULL)	    {	    printf("resolvSend()\n");	    (*pdnsDebugFunc)(buf);	    }#endif /* ORG_RESOLVER */#ifdef ORG_RESOLVER	/* Unecessary test under VxWorks */	if (!(_res.options & RES_INIT))		if (res_init() == -1) {			return(ERROR);		}#endif /* ORG_RESOLVER */	v_circuit = (_res.options & RES_USEVC) || buflen > PACKETSZ;	id = hp->id;	/*	 * Send request, RETRY times, or until successful	 */	for (try = 0; try < _res.retry; try++) {	   start = MAXDNSLUS;	   for (ns = 0; ns < _res.nscount; ns++) {		/*		 * Only query servers marked active or appearing after		 * a server marked as active. This prevents this loop		 * from rescanning the entire array every time resolvSend 	         * is called		 */		if ((_res.lookups [ns] != 'a') && (ns < start))		    continue;		if (ns > start)		    _res.lookups [ns] = 'd';  /* mark as 'done' */		start = ns;#ifdef DEBUG		if (_res.options & RES_DEBUG)			printf("Querying server (# %d) address = %s\n", ns+1,			      inet_ntoa(_res.nsaddr_list[ns].sin_addr));#endif /* DEBUG */	usevc:		if (v_circuit) {			int truncated = 0;			/*			 * Use virtual circuit;			 * at most one attempt per server.			 */			try = _res.retry;			if (s < 0) {				s = socket(AF_INET, SOCK_STREAM, 0);				if (s < 0) {					terrno = errno;#ifdef DEBUG					if (_res.options & RES_DEBUG)					    perror("socket (vc) failed");#endif /* DEBUG */					continue;				}				if (connect(s,				    (struct sockaddr *)&(_res.nsaddr_list[ns]),				    sizeof(struct sockaddr)) < 0) {					terrno = errno;#ifdef DEBUG					if (_res.options & RES_DEBUG)					    perror("connect failed");#endif /* DEBUG */					(void) close(s);					s = -1;					continue;				}			}			/*			 * Send length & message			 */			len = htons((u_short)buflen);			iov[0].iov_base = (caddr_t)&len;			iov[0].iov_len = sizeof(len);			iov[1].iov_base = (char *)buf;			iov[1].iov_len = buflen;			if (writev(s, iov, 2) != sizeof(len) + buflen) {				terrno = errno;#ifdef DEBUG				if (_res.options & RES_DEBUG)					perror("write failed");#endif /* DEBUG */				(void) close(s);				s = -1;				continue;			}			/*			 * Receive length & response			 */			cp = answer;			len = sizeof(short);			while (len != 0 &&			    (n = read(s, (char *)cp, (int)len)) > 0) {				cp += n;				len -= n;			}			if (n <= 0) {				terrno = errno;#ifdef DEBUG				if (_res.options & RES_DEBUG)					perror("read failed");#endif /* DEBUG */				(void) close(s);				s = -1;				/*				 * A long running process might get its TCP				 * connection reset if the remote server was				 * restarted.  Requery the server instead of				 * trying a new one.  When there is only one				 * server, this means that a query might work				 * instead of failing.  We only allow one reset				 * per query to prevent looping.				 */				if (terrno == ECONNRESET && !connreset) {					connreset = 1;					ns--;				}				continue;			}			cp = answer;			if ((resplen = ntohs(*(u_short *)cp)) > anslen) {#ifdef DEBUG				if (_res.options & RES_DEBUG)					fprintf(stderr, "response truncated\n");#endif /* DEBUG */				len = anslen;				truncated = 1;			} else				len = resplen;			while (len != 0 &&			   (n = read(s, (char *)cp, (int)len)) > 0) {				cp += n;				len -= n;			}			if (n <= 0) {				terrno = errno;#ifdef DEBUG				if (_res.options & RES_DEBUG)					perror("read failed");#endif /* DEBUG */				(void) close(s);				s = -1;				continue;			}			if (truncated) {				/*				 * Flush rest of answer				 * so connection stays in synch.				 */				anhp->tc = 1;				len = resplen - anslen;				while (len != 0) {					n = (len > sizeof(junk) ?					    sizeof(junk) : len);					if ((n = read(s, junk, n)) > 0)						len -= n;					else						break;				}			}		} else {			/*			 * Use datagrams.			 */			if (s < 0) {				s = socket(AF_INET, SOCK_DGRAM, 0);				if (s < 0) {					terrno = errno;#ifdef DEBUG					if (_res.options & RES_DEBUG)					    perror("socket (dg) failed");#endif /* DEBUG */					continue;				}			}#if	BSD >= 43			/*			 * I'm tired of answering this question, so:			 * On a 4.3BSD+ machine (client and server,			 * actually), sending to a nameserver datagram			 * port with no nameserver will cause an			 * ICMP port unreachable message to be returned.			 * If our datagram socket is "connected" to the			 * server, we get an ECONNREFUSED error on the next			 * socket operation, and select returns if the			 * error message is received.  We can thus detect			 * the absence of a nameserver without timing out.			 * If we have sent queries to at least two servers,			 * however, we don't want to remain connected,			 * as we wish to receive answers from the first			 * server to respond.			 */			if (_res.nscount == 1 || (try == 0 && ns == 0)) {				/*				 * Don't use connect if we might				 * still receive a response				 * from another server.				 */				if (connected == 0) {			if (connect(s, (struct sockaddr *)&_res.nsaddr_list[ns],					    sizeof(struct sockaddr)) < 0) {#ifdef DEBUG						if (_res.options & RES_DEBUG)							perror("connect");#endif /* DEBUG */						continue;					}					connected = 1;				}				if (send(s, buf, buflen, 0) != buflen) {#ifdef DEBUG					if (_res.options & RES_DEBUG)						perror("send");#endif /* DEBUG */					continue;				}			} else {				/*				 * Disconnect if we want to listen				 * for responses from more than one server.				 */				if (connected) {					(void) connect(s, &no_addr,					    sizeof(no_addr));					connected = 0;				}#endif /* BSD */				if (sendto(s, (char *) buf, buflen, 0,				    (struct sockaddr *)&_res.nsaddr_list[ns],				    sizeof(struct sockaddr)) != buflen) {#ifdef DEBUG					if (_res.options & RES_DEBUG)						perror("sendto");#endif /* DEBUG */					continue;				}#if	BSD >= 43			}#endif			/*			 * Wait for reply			 */			timeout.tv_sec = (_res.retrans << try);			if (try > 0)				timeout.tv_sec /= _res.nscount;			if (timeout.tv_sec <= 0)				timeout.tv_sec = 1;			timeout.tv_usec = 0;wait:			FD_ZERO(&dsmask);			FD_SET(s, &dsmask);			n = select(s+1, &dsmask, (fd_set *)NULL,				(fd_set *)NULL, &timeout);			if (n < 0) {#ifdef DEBUG				if (_res.options & RES_DEBUG)					perror("select");#endif /* DEBUG */				continue;			}			if (n == 0) {				/*				 * timeout				 */#ifdef DEBUG				if (_res.options & RES_DEBUG)					printf("timeout\n");#endif /* DEBUG */#if BSD >= 43				gotsomewhere = 1;#endif				continue;			}			if ((resplen = recv(s, answer, anslen, 0)) <= 0) {#ifdef DEBUG				if (_res.options & RES_DEBUG)					perror("recvfrom");#endif /* DEBUG */				continue;			}			gotsomewhere = 1;			if (id != anhp->id) {				/*				 * response from old query, ignore it				 */#ifdef ORG_RESOLVER#ifdef DEBUG				if (_res.options & RES_DEBUG) {					printf("old answer:\n");					__p_query(answer);				}#endif /* DEBUG */#else				if (pdnsDebugFunc != (FUNCPTR) NULL)				    {				    printf("old answer:\n");				    (*pdnsDebugFunc)(answer);				    }#endif /* ORG_RESOLVER */				goto wait;			}			if (!(_res.options & RES_IGNTC) && anhp->tc) {				/*				 * get rest of answer;				 * use TCP with same server.				 */#ifdef DEBUG				if (_res.options & RES_DEBUG)					printf("truncated answer\n");#endif /* DEBUG */				(void) close(s);				s = -1;				v_circuit = 1;				goto usevc;			}		}#ifdef ORG_RESOLVER#ifdef DEBUG		if (_res.options & RES_DEBUG) {			printf("got answer:\n");			__p_query(answer);		}#endif /* DEBUG */#else		if (pdnsDebugFunc != (FUNCPTR) NULL)		    {		    printf("got answer:\n");		    (*pdnsDebugFunc)(answer);		    }#endif /* ORG_RESOLVER */		/*		 * If using virtual circuits, we assume that the first server		 * is preferred * over the rest (i.e. it is on the local		 * machine) and only keep that one open.		 * If we have temporarily opened a virtual circuit,		 * or if we haven't been asked to keep a socket open,		 * close the socket.		 */		if ((v_circuit &&		    ((_res.options & RES_USEVC) == 0 || ns != 0)) ||		    (_res.options & RES_STAYOPEN) == 0) {			(void) close(s);			s = -1;		}		return (resplen);	   }	}	if (s >= 0) {		(void) close(s);		s = -1;	}	if (v_circuit == 0)		if (gotsomewhere == 0)			errno = ECONNREFUSED;	/* no nameservers found */		else			errno = ETIMEDOUT;	/* no answer obtained */	else		errno = terrno;	return (ERROR);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片另类小说| 欧美一区二区免费视频| 国产欧美一区二区精品婷婷| 国产在线精品一区二区不卡了| 精品少妇一区二区三区在线播放 | 亚洲免费色视频| 色偷偷成人一区二区三区91| 一区二区三区在线观看国产| 欧美美女一区二区| 青青草国产成人av片免费| 精品国产a毛片| av亚洲精华国产精华精华 | 日韩精品影音先锋| 粉嫩av亚洲一区二区图片| 中文字幕综合网| 欧美伦理电影网| 国产精品一二三区| 一区二区三区在线看| 日韩一级欧美一级| av中文字幕一区| 日韩成人精品在线观看| 日本一区二区三区四区| 欧美又粗又大又爽| 国产精品99久久久久久有的能看 | 一区二区视频在线| 日韩午夜在线影院| 99精品视频在线免费观看| 亚洲成人av福利| 国产欧美日韩在线看| 欧美日韩亚洲综合在线| 国产精品18久久久久久久久| 亚洲一区二区三区四区五区黄 | 久久久久久久免费视频了| 色综合中文字幕| 久久国产精品99精品国产| 1024成人网| 日韩三级视频在线观看| 91同城在线观看| 成人av网站免费| 日韩成人一级片| 亚洲激情图片qvod| 国产亚洲1区2区3区| 欧美日本精品一区二区三区| 成人av集中营| 国产精品资源站在线| 亚洲成人动漫在线免费观看| 国产精品不卡在线观看| 久久影音资源网| 欧美二区乱c少妇| 色婷婷综合久色| 国产乱码精品1区2区3区| 视频一区二区三区在线| 夜夜嗨av一区二区三区中文字幕| 26uuu精品一区二区在线观看| 欧美精三区欧美精三区| 在线观看视频一区| 色哟哟精品一区| 99久久夜色精品国产网站| 国产一区二区三区av电影| 日本亚洲视频在线| 天天亚洲美女在线视频| 亚洲国产一区视频| 亚洲精品伦理在线| 亚洲视频在线一区| 国产精品国产自产拍高清av| xfplay精品久久| 精品国产青草久久久久福利| 678五月天丁香亚洲综合网| 欧美日韩亚洲国产综合| 欧美在线你懂得| 欧美日韩一级黄| 欧美日韩国产影片| 在线电影一区二区三区| 欧美日韩亚洲综合在线 | 欧美性欧美巨大黑白大战| a在线欧美一区| 91在线观看一区二区| 99精品欧美一区二区蜜桃免费| 福利电影一区二区三区| 成人午夜短视频| 成人午夜私人影院| 成人a免费在线看| 97se亚洲国产综合在线| 色菇凉天天综合网| 欧洲一区二区三区在线| 欧美日韩精品一区二区天天拍小说 | 国模冰冰炮一区二区| 精品亚洲国产成人av制服丝袜| 美脚の诱脚舐め脚责91| 国产一区二区91| 从欧美一区二区三区| 91在线无精精品入口| 色综合欧美在线| 欧美日韩中字一区| 日韩午夜在线观看| 国产亚洲综合在线| 亚洲欧洲成人精品av97| 亚洲影院久久精品| 久久精品国产一区二区三| 国产综合色视频| 成人黄色大片在线观看| 欧美图区在线视频| 欧美一级理论性理论a| 久久久影视传媒| 亚洲欧美另类久久久精品2019| 亚洲成人在线免费| 国产美女一区二区| 色婷婷国产精品| 日韩一级二级三级| 国产精品二区一区二区aⅴ污介绍| 亚洲日本va午夜在线电影| 日日摸夜夜添夜夜添精品视频| 加勒比av一区二区| 97国产一区二区| 日韩一区二区三区在线视频| 欧美国产乱子伦| 婷婷开心激情综合| 福利电影一区二区三区| 欧美精品少妇一区二区三区| 久久精品人人做人人爽人人| 亚洲黄色录像片| 国产在线精品免费av| 91久久精品日日躁夜夜躁欧美| 欧美一区二区二区| 亚洲美女视频一区| 国产一区二区导航在线播放| 欧美日韩一级片网站| 国产欧美一区二区三区在线看蜜臀 | 日本vs亚洲vs韩国一区三区 | 精品噜噜噜噜久久久久久久久试看| 中文子幕无线码一区tr| 美女精品自拍一二三四| 日本高清不卡aⅴ免费网站| 久久久国产综合精品女国产盗摄| 亚洲成在线观看| 99久久99久久久精品齐齐| 亚洲精品在线网站| 青草av.久久免费一区| 91福利国产精品| 国产精品美日韩| 国产一区二区三区蝌蚪| 91精品国产综合久久婷婷香蕉| 亚洲黄色性网站| 99在线精品观看| 国产午夜一区二区三区| 美国av一区二区| 69久久夜色精品国产69蝌蚪网| 亚洲人成伊人成综合网小说| 成人午夜私人影院| 久久久www成人免费毛片麻豆| 奇米777欧美一区二区| 欧美色手机在线观看| 一区二区三区在线免费观看| 99久久精品免费观看| 国产精品嫩草久久久久| 国产999精品久久久久久绿帽| 日韩女同互慰一区二区| 青青草原综合久久大伊人精品 | 日本免费在线视频不卡一不卡二 | 性感美女极品91精品| 色婷婷av一区二区三区大白胸| 国产精品动漫网站| bt7086福利一区国产| 1024成人网色www| 99re热这里只有精品视频| 国产精品久久久久久久久久久免费看 | 久久久国产精品午夜一区ai换脸| 热久久一区二区| 日韩一级片网站| 精品一区精品二区高清| 亚洲人亚洲人成电影网站色| 97成人超碰视| 亚洲国产一区二区三区青草影视| 在线观看日韩一区| 日韩国产欧美在线播放| 日韩精品专区在线影院观看| 精彩视频一区二区| 国产三级精品三级在线专区| 成人国产精品免费观看动漫| 一区在线播放视频| 在线观看www91| 美国av一区二区| 国产免费成人在线视频| 色婷婷综合久久| 日韩中文字幕不卡| 精品日韩在线观看| 成人福利视频网站| 亚洲精品国产精华液| 欧美高清视频www夜色资源网| 蜜臀av性久久久久蜜臀av麻豆| 2017欧美狠狠色| 91免费国产在线| 日韩av中文在线观看| 2023国产精品| 色婷婷av一区二区三区大白胸| 日韩av中文在线观看| 国产欧美日韩中文久久| 欧美性猛交xxxx黑人交| 经典一区二区三区| 亚洲日本中文字幕区|