【说明】
包含头文件:
#include<netdb.h>
函数原型:
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **res );
参数说明:
hostname 一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
service 服务,即端口号,可以是一个服务的名称,比如"http", 也可以是一个数字字符串,比如“80”
hints 可以理解为约束条件,即你创建的,要获得的addrinfo结构,有什么约束,在hints中进行设置
res 这个就是我们最终获得的addrinfo结构
功能说明:
getaddrinfo 提供了将主机名和服务名转换成套接口地址结构(网络序)的功能
产生原因:
之前套接字编程,要得到sockaddr类型: 必须使用两种函数 getserverbyname(一类的函数 和 gethostent (一类的函数), 然后构建 sockaddr_in 结构,再强制类型转换得到 sockaddr结构。 而有了getaddrinfo这个函数后,直接调用就能得到sockaddr。
使用说明:
如果本函数返回成功,那么由res参数指向的变量已被填入一个指针,它指向的是由其中的ai_next成员串联起来的addrinfo结构链表。可以导致返回多个addrinfo结构的情形有以下两个:
1)如果与hostname参数关联的地址有多个,那么适用于所请求地址簇的每个地址都返回一个对应的结构。
当hints.ai_socktype=0,即未指定socket类型,则能会返回SOCK_DGRAM、SOCK_STREAM、SOCK_SEQPACKET等多种类型的addrinfo结构ÿ