【发布时间】:2014-07-18 05:13:14
【问题描述】:
我只是想了解 getaddrinfo() 的行为。
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_storage 并以 gcc 警告告终: 警告:强制转换会增加目标类型所需的对齐方式 将 sockaddr 类型转换为 sockaddr_storage 的正确方法是什么? 几个答案后更新: 问题是关于 gcc 警告: 并通过以下方式解决:(struct sockaddr_storage *)(res->ai_addr)
> warning: cast increases required alignment of target type
(struct sockaddr_storage *)(void *)(res->ai_addr)
【问题讨论】:
-
希望你已经阅读了这篇文章,这是我需要知道的一切beej.us/guide/bgnet/output/html/singlepage/bgnet.html#lowlevel