简体   繁体   English

如何从struct sockaddr生成struct addrinfo?

[英]How to produce struct addrinfo from struct sockaddr?

I have a struct sockaddr and need to make a struct addrinfo (specifically that, because that's what some other API wants). 我有一个struct sockaddr并且需要创建一个struct addrinfo(特别是那个,因为这是其他一些API想要的)。 The IP address may be IPv4 or IPv6. IP地址可以是IPv4或IPv6。 What's the best way to handle that? 处理这个问题的最佳方法是什么?

From man 3 getaddrinfo , 来自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;
};

A struct addrinfo contains more information than just a struct sockaddr does. struct addrinfo包含的信息不仅仅是struct sockaddr信息。 Given a struct sockaddr_in , you can have some of this information ( .ai_family = AF_INET, .ai_addrlen = sizeof(struct sockaddr_in) ). 给定struct sockaddr_in ,您可以获得一些这些信息( .ai_family = AF_INET, .ai_addrlen = sizeof(struct sockaddr_in) )。 Whether this is sufficient depends on what the other API is looking for. 这是否足够取决于其他API正在寻找什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM