如何从struct sockaddr生成struct addrinfo?

3

我有一个struct sockaddr结构体,需要创建一个struct addrinfo结构体(因为其他一些API需要这样)。IP地址可能是IPv4或IPv6。怎么处理最好?

1个回答

5

来自getaddrinfo的man 3页面

struct addrinfo {
    int              ai_flags;
    int              ai_family;
    int              ai_socktype;
    int              ai_protocol;
    size_t           ai_addrlen;
    struct sockaddr *ai_addr;
    char            *ai_canonname;
    struct addrinfo *ai_next;
};

struct addrinfostruct sockaddr包含更多的信息。对于一个struct sockaddr_in,你可以获得一些这些信息(.ai_family = AF_INET, .ai_addrlen = sizeof(struct sockaddr_in))。是否足够取决于其他API所需的内容。


1
是的,创建一个新的addrinfo,将sockaddr放入*ai_addr,并用合理的值填充其他字段似乎是正确的方法。 - bortzmeyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接