📄 sample.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 + -