这一章比较混乱,现在整理一下。
一、数据结构:
1、hostent: 这个数据结构用在gethostbyname这个函数中,表示与host 相关的一些 entries.
struct hostent { char *h_name; /* official (canonical) name of host */ char **h_aliases; /* pointer to array of pointers to alias names */ int h_addrtype; /* host address type: AF_INET */ int h_length; /* length of address: 4 */ char **h_addr_list; /* ptr to array of ptrs with IPv4 addrs */ };
2、servent: 这个数据结构用在getservbyname这个函数中,表示service 相关的一些 entries.
struct servent { char *s_name; /* official service name */ char **s_aliases; /* alias list */ int s-port; /* port number, network-byte order */ char *s_proto; /* protocol to use */ };
3、addrinfo: 这个数据结构用在getaddrinfo这个函数中,是它的返回值,表示与 IPv4或者IPv6 地址相关的一些信息.
struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* AF_xxx */ int ai_socktype; /* SOCK_xxx */ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ socklen_t ai_addrlen; /* length of ai_addr */ char *ai_canonname; /* ptr to canonical name for host */ struct sockaddr *ai_addr; /* ptr to socket address structure */ struct addrinfo *ai_next; /* ptr to next structure in linked list */ };
二、基本函数:
1、gethostbyname
2、gethostbyaddr
3、getservbyname
4、getservbyport
5、getaddrinfo
6、gai_strerror
7、freeaddrinfo
8、getnameinfo
这些函数基本上都是resolver 所提供的函数,可以用来查找DNS,也可以不查找DNS而在本地电脑上查找相应的文件,这就需要设定相应的flags 等参数。
三、resolver