⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
字号:
#include <stdio.h>#include <strings.h>#include <errno.h>#include <sys/types.h>#include <sys/time.h>#include <netinet/in.h>#include <netdb.h>#include "arlib.h"#ifndef	lintstatic	char	sccsid[] = "@(#)sample.c	1.1 12/21/92 (C)1992 Darren Reed. ASYNC DNS";#endifchar	line[512];int	lookup = 0, seq = 0;long	expire = 0;main(){	struct	in_addr adr;	struct	timeval	tv2;	fd_set	rd;	long	now;	char	*s;	int	afd, nfd, pid = getpid(), del;	afd = ar_init(ARES_INITLIST|ARES_CALLINIT|ARES_INITSOCK);	(void)printf("afd = %d pid = %d\n",afd, pid);	while (1)	{		(void)printf("Host =>");		(void)fflush(stdout);		*line = '\0';		FD_ZERO(&rd);		FD_SET(0,&rd);		FD_SET(afd,&rd);		now = time(NULL);		if (expire >= now)		    {			tv2.tv_usec = 0;			tv2.tv_sec = expire - now;			nfd = select(FD_SETSIZE, &rd, NULL, NULL, &tv2);		    }		else			nfd = select(FD_SETSIZE, &rd, NULL, NULL, NULL);		if (FD_ISSET(0, &rd))		{			if (!fgets(line, sizeof(line) - 1, stdin))				exit(0);			if (s = index(line, '\n'))				*s = '\0';		}		if (isalpha(*line))		{			(void)printf("Asking about [%s] #%d.\n",line, ++seq);			(void)ar_gethostbyname(line, (char *)&seq,					       sizeof(seq));			lookup++;		}		else if (isdigit(*line))		{			(void)printf("Asking about IP#[%s] #%d.\n",				line, ++seq);			adr.s_addr = inet_addr(line);			(void)ar_gethostbyaddr(&adr, (char *)&seq,					       sizeof(seq));			lookup++;		}		if (lookup)			(void)printf("Waiting for answer:\n");		if (FD_ISSET(afd, &rd))			(void)waitonlookup(afd);		del = 0;		expire = ar_timeout(time(NULL), &del, sizeof(del));		if (del)		{			(void)fprintf(stderr,"#%d failed\n", del);			lookup--;		}	}}printhostent(hp)struct hostent *hp;{	struct in_addr ip;	int i;	(void)printf("hname = %s\n", hp->h_name);	for (i = 0; hp->h_aliases[i]; i++)		(void)printf("alias %d = %s\n", i+1, hp->h_aliases[i]);	for (i = 0; hp->h_addr_list[i]; i++)	{		bcopy(hp->h_addr_list[i], (char *)&ip, sizeof(ip));		(void)printf("IP# %d = %s\n", i+1, inet_ntoa(ip));	}}int	waitonlookup(afd)int	afd;{	struct	timeval delay;	struct	hostent	*hp;	fd_set	rd;	long	now;	int	nfd, del;waitloop:	FD_ZERO(&rd);	now = time(NULL);	if (expire >= now)		delay.tv_sec = expire - now;	else		delay.tv_sec = 1;	delay.tv_usec = 0;	FD_SET(afd, &rd);	FD_SET(0, &rd);	nfd = select(FD_SETSIZE, &rd, 0, 0, &delay);	if (nfd == 0)		return 0;	else if (FD_ISSET(afd, &rd))	{		del = 0;		hp = ar_answer(&del, sizeof(del));		(void)printf("hp=%x seq=%d\n",hp,del);		if (hp)		    {			(void)printhostent(hp);			if (!--lookup)				return 1;		    }	}	if (FD_ISSET(0, &rd))		return 2;	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -