linux网络编程之AF_INET AF_INET6 AF_UNSPEC

int getaddrinfo(const char *node, const char *service,
                const struct addrinfo *hints,
                struct addrinfo **res);
struct addrinfo {
    int ai_flags;
    int ai_family;
    int ai_socktype;
    int ai_protocol;
    socklen_t ai_addrlen;
    struct sockaddr *ai_addr;
    char *ai_canonname;
    struct addrinfo *ai_next;
};

ai_family参数指定调用者期待返回的套接口地址结构的类型。 它的值包括三种:

  1. AF_INET: 函数返回IPV4相关的地址信息
  2. AF_INET6: 函数返回IPV6相关的地址信息
  3. AF_UNSPEC: 函数返回的是适用于指定主机名和服务名且适合任何协议族的地址

如果某个主机既有AAAA记录(IPV6)地址,同时又有A记录(IPV4)地址,那么AAAA记录将作为sockaddr_in6结构返回,而A记录则作为sockaddr_in结构返回。

ref: http://blog.sina.com.cn/s/blog_8184e033010134c4.html