我只是想了解getaddrinfo()行为。sockaddr和IPv6地址
int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res);
生成的IP(v4/v6)地址保存在(每个)struct addrinfo中的数据。
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;
};
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
如果结果中的一个是IPv6地址(16个字节),它如何被保存在ai_addr其类型的sockaddr其大小为< IPv6地址。
我在这里的问题是,我型铸造ai_addr到struct sockaddr_storage的
(struct sockaddr_storage *)(res->ai_addr)
并且可能在GCC的警告结束:
警告:投增加目标类型的对齐要求
将sppaddr转换为sockaddr_storage的正确方法是什么?几个答案后
更新:
问题是在海湾合作委员会警告:
> warning: cast increases required alignment of target type
而且它与解决:
(struct sockaddr_storage *)(void *)(res->ai_addr)
希望你已经读过它所有我需要知道的东西http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#lowlevel – MarkAWard