我只是想了解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