1. 程式人生 > >addrinfo結構體原型-(轉自 cxz2009)

addrinfo結構體原型-(轉自 cxz2009)

info 字符 logs 常用 設置 toc 返回 type ive

addrinfo結構體原型

typedef struct addrinfo {
int ai_flags; //AI_PASSIVE,AI_CANONNAME,AI_NUMERICHOST
int ai_family; //AF_INET,AF_INET6
int ai_socktype; //SOCK_STREAM,SOCK_DGRAM
int ai_protocol; //IPPROTO_IP, IPPROTO_IPV4, IPPROTO_IPV6 etc.
size_t ai_addrlen; //must be zero or a null pointer
char* ai_canonname; //must be zero or a null pointer
struct sockaddr* ai_addr; //must be zero or a null pointer
struct addrinfo* ai_next; //must be zero or a null pointer
}

其中ai_flags、ai_family、ai_socktype說明如下:
參數 取值 值 說明
ai_family AF_INET 2 IPv4
AF_INET6 23 IPv6
AF_UNSPEC 0 協議無關
ai_protocol IPPROTO_IP 0 IP協議
IPPROTO_IPV4 4 IPv4
IPPROTO_IPV6 41 IPv6
IPPROTO_UDP 17 UDP
IPPROTO_TCP 6 TCP
ai_socktype SOCK_STREAM 1 流
SOCK_DGRAM 2 數據報
ai_flags AI_PASSIVE 1 被動的,用於bind,通常用於server socket
AI_CANONNAME 2
AI_NUMERICHOST 4 地址為數字串

對於ai_flags值的說明:
AI_NUMERICHOST | AI_CANONNAME | AI_PASSIVE
如上表所示,ai_flags的值範圍為0~7,取決於程序如何設置3個標誌位,比如設置ai_flags為 “AI_PASSIVE|AI_CANONNAME”,ai_flags值就為3。三個參數的含義分別為:
(1)AI_PASSIVE當此標誌置位時,表示調用者將在bind()函數調用中使用返回的地址結構。當此標誌不置位時,表示將在connect()函數調用中使用。當節點名位NULL,且此標誌置位,則返回的地址將是通配地址。如果節點名NULL,且此標誌不置位,則返回的地址將是回環地址。
(2)AI_CANNONAME當此標誌置位時,在函數所返回的第一個addrinfo結構中的ai_cannoname成員中,應該包含一個以空字符結尾的字符串,字符串的內容是節點名的正規名。
(3)AI_NUMERICHOST當此標誌置位時,此標誌表示調用中的節點名必須是一個數字地址字符串。 轉載鏈接:http://www.cnblogs.com/cxz2009/archive/2010/11/19/1881661.html

addrinfo結構體原型-(轉自 cxz2009)