【问题标题】:How to produce struct addrinfo from struct sockaddr?如何从 struct sockaddr 生成 struct addrinfo?
【发布时间】:2010-02-10 21:23:56
【问题描述】:

我有一个 struct sockaddr 并且需要创建一个 struct addrinfo(特别是那个,因为这是其他一些 API 想要的)。 IP 地址可以是 IPv4 或 IPv6。最好的处理方法是什么?

【问题讨论】:

    标签: c networking sockets


    【解决方案1】:

    来自man 3 getaddrinfo

    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 正在寻找什么。

    【讨论】:

    • 是的,创建一个新的 addrinfo,将 sockaddr 放入 *ai_addr 并用合理的值填充其他字段似乎是可行的方法。
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 2016-10-07
    • 2011-04-11
    • 2015-06-21
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多