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當此標志置位時,此標志表示調用中的節點名必須是一個數字地址字符串。
?? ?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當此標志置位時,此標志表示調用中的節點名必須是一個數字地址字符串。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
