青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

getaddrinfo()詳解

Posted on 2010-07-02 08:21 S.l.e!ep.¢% 閱讀(3745) 評論(0)  編輯 收藏 引用 所屬分類: VC

getaddrinfo()詳解 收藏

IPv4中使用gethostbyname()函數完成主機名到地址解析,但是該API不允許調用者指定 所需地址類型的任何信息,返回的結構只包含了用于存儲IPv4地址的空間。為了解決該問題,IPv6中引入了getaddrinfo()的新API,它是 協議無關的,既可用于IPv4也可用于IPv6。調用該函數會獲得一個addrinfo結構的列表,調用的返回值是addrinfo的結構(列表)指針。

??????? 本文結合在WinowsXP和Windows2003 Server上使用該函數的經驗,對getaddrinfo函數和addrinfo數據結構進行介紹,并對其參數的設置加以討論,主要包括 nodename和servname的取值對返回值的影響,hints成員變量的設置對返回值的影響等。

可能有不完全或不準確的地方,歡迎大家討論并指出。

1 getaddrinfo函 數原型

函數

參數說明

int getaddrinfo(

const char* nodename

const char* servname,

const struct addrinfo* hints,//

struct addrinfo** res

);

nodename:節點名可以是主機名,也可以是數字地址。(IPV4的10進點分,或是IPV6的16進制)

servname:包含十進制數的端口號或服務名如(ftp,http)

hints:是一個空指針或指向一個addrinfo結構的指針,由調用者填寫關于它所想返回的信息類型的線索。

res:存放返回addrinfo結構鏈表的指針

Getaddrinfo提供獨立于協議的名稱解析。

函數的前兩個參數分別是節點名和服務名。節點名可以是主機名,也可以是地址串(IPv4的點分十進制數表示或IPv6的十六進制數字串)。服務名可 以是十進制的端口號,也可以是已定義的服務名稱,如ftp、http等。注意:其中節點名和服務名都是可選項,即節點名或服務名可以為NULL, 此時調用的結果將取缺省設置,后面將詳細討論。

函數的第三個參數hints是addrinfo結構的指針,由調用者填寫關于它所想返回的信息類型的線索。函數的返回值是一個指向addrinfo 結構的鏈表指針res。

2 addrinfo結構

結構

固定的參數

typedef struct addrinfo {??

int ai_flags;??

int ai_family;??

int ai_socktype;??

int ai_protocol;??

size_t ai_addrlen;??

char* ai_canonname;??

struct sockaddr* ai_addr;??

struct addrinfo* ai_next;

}

ai_addrlen must be zero or a null pointer

ai_canonname must be zero or a null pointer

ai_addr must be zero or a null pointer

ai_next must be zero or a null pointer

可以改動的參數

ai_flags:AI_PASSIVE,AI_CANONNAME,AI_NUMERICHOST

ai_family: AF_INET,AF_INET6

ai_socktype:SOCK_STREAM,SOCK_DGRAM

ai_protocol:IPPROTO_IP, IPPROTO_IPV4, IPPROTO_IPV6 etc.

3 參數說明

在getaddrinfo函數之前通常需要對以下6個參數進行以下設置:nodename、servname、hints的ai_flags、 ai_family、ai_socktype、ai_protocol

在6項參數中,對函數影響最大的是nodename,sername和hints.ai_flag

而ai_family只是有地址為v4地址或v6地址的區別。而ai_protocol一般是為0不作改動。

其中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

0/1

0/1

0/1

如上表所示,ai_flagsde值范圍為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當此標志置位時,此標志表示調用中的節點名必須是一個數字地址字符串。

4.實際使用的幾種常用設置

一般情況下,client/server編程中,server端調用bind(如果面向連接的還需要listen),client則不用掉bind 函數,解析地址后直接connect(面向連接)或直接發送數據(無連接)。因此,比較常見的情況有

(1)??????? 通常服務器端在調用getaddrinfo之前,ai_flags設置AI_PASSIVE,用于bind;主機名nodename通常會設置為 NULL,返回通配地址[::]。

(2)??????? 客戶端調用getaddrinfo時,ai_flags一般不設置AI_PASSIVE,但是主機名nodename和服務名servname(更愿意稱 之為端口)則應該不為空。

(3)??????? 當然,即使不設置AI_PASSIVE,取出的地址也并非不可以被bind,很多程序中ai_flags直接設置為0,即3個標志位都不設置,這種情況下 只要hostname和servname設置的沒有問題就可以正確bind。

上述情況只是簡單的client/server中的使用,但實際在使用getaddrinfo和參考國外開源代碼的時候,曾遇到一些將 servname(即端口)設為NULL的情況

(當然,此時nodename必不為NULL,否則調用getaddrinfo會報錯)。以下分情況進行了測試:

(1)??????? 如果nodename是字符串型的IPv6地址,bind的時候會分配臨時端口;

(2)??????? 如果nodename是本機名,servname為NULL,則根據操作系統的不同略有不同,本文僅在WinXP和Win2003上作了測試。

a)????????? WinXP系統(SP2)返回loopback地址[::1]

b)???????? Win2003則將本機的所有IPv6地址列表加以返回。因為通常一臺IPv6主機都有可能不止一個IPv6地址,比如fe80::1(本機 loopback地址)、fe80::***的Link-Local地址、3ffe:***的全局地址等等。這種情況下調用getaddrinfo會將這 些地址全部返回,調用者應該注意如何使用這些地址。另外要注意的是,對于fe80::的地址在綁定的時候必須標明接口地址,即使用 fe80::20d:60ff:fe78:51c2%4或fe80::1%1這樣的地址格式,通過getaddrinfo直接取出fe80地址好像無法直 接bind。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区国产在线观看| 亚洲精品欧美激情| 国产精品一区二区久激情瑜伽| 欧美中文字幕视频| 亚洲国产小视频| 亚洲欧美日韩视频二区| 国语自产精品视频在线看抢先版结局| 国产精品久久久久久久久免费 | 亚洲精品日韩在线观看| 欧美成人亚洲| 亚洲国产精品va在线看黑人| 欧美韩国一区| 亚洲激情一区二区| 亚洲一区二区3| 在线视频你懂得一区| 亚洲日韩欧美视频| 欧美一级夜夜爽| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美日韩在线一区| 欧美一区二区视频在线观看2020 | 99视频有精品| 欧美电影在线观看| 亚洲激情专区| 久久免费观看视频| 美女脱光内衣内裤视频久久影院| 欧美激情bt| 樱桃成人精品视频在线播放| 欧美一区二区三区在线| 亚洲激情不卡| 欧美不卡高清| 尤物网精品视频| 久久综合伊人77777蜜臀| 欧美一级网站| 精品91久久久久| 欧美一区二区免费| 日韩视频免费看| 国产精品v欧美精品v日本精品动漫 | 亚洲天堂偷拍| 欧美三级网页| 亚洲欧美国产高清| 亚洲在线一区| 国产精品一香蕉国产线看观看| 亚洲国产精品久久久久婷婷老年 | 欧美大片专区| 久久在精品线影院精品国产| 欧美三级电影一区| 亚洲精品之草原avav久久| 亚洲黄色在线观看| 欧美日韩国产三级| 亚洲影院在线观看| 欧美制服丝袜第一页| 亚洲国产精品123| 一本到12不卡视频在线dvd| 欧美激情第六页| 性色av一区二区三区| 久久精品91久久久久久再现| 怡红院精品视频| 99日韩精品| 亚洲福利视频免费观看| 中文欧美日韩| 亚洲黄色免费网站| 欧美与欧洲交xxxx免费观看| 午夜在线一区二区| 一区二区三区在线视频观看| 久久噜噜亚洲综合| 国产精品美女久久久久久2018| 久久久久久久久岛国免费| 欧美sm视频| 免播放器亚洲一区| 欧美成人午夜影院| 欧美午夜片在线免费观看| 91久久精品www人人做人人爽| 国一区二区在线观看| 亚洲在线一区| 久久久亚洲一区| 精品999久久久| 久久手机免费观看| 噜噜噜91成人网| 激情婷婷久久| 欧美影视一区| 欧美成人免费小视频| 在线观看视频一区| 欧美日韩一区二区视频在线观看| 亚洲精品欧美| 在线亚洲美日韩| 国产色视频一区| 老司机免费视频久久| 日韩五码在线| 蜜臀av在线播放一区二区三区| 国产精品99久久久久久久女警| 国产精品久久久久aaaa| 久久久噜噜噜久久| 一区二区三区高清不卡| 久久婷婷人人澡人人喊人人爽| 99精品国产在热久久婷婷| 国产视频在线观看一区二区| 裸体女人亚洲精品一区| 欧美一区二区黄色| 亚洲免费观看高清在线观看 | 最新国产乱人伦偷精品免费网站| 日韩一级欧洲| 在线精品福利| 国产一在线精品一区在线观看| 欧美精品免费播放| 欧美成人日韩| 美女精品视频一区| 欧美在线一级va免费观看| 亚洲影院色无极综合| 一本综合久久| 亚洲东热激情| 91久久精品美女高潮| 亚洲国内精品| 亚洲片区在线| 亚洲美洲欧洲综合国产一区| 亚洲激情视频在线| 一个色综合av| 久久久91精品国产| 美女图片一区二区| 国产精品国产三级国产a| 国产精品午夜在线| 国内精品久久久久久久影视麻豆 | 欧美精品久久久久久| 欧美日韩亚洲视频| 国产欧美日韩一区| 亚洲国产片色| 亚洲在线成人精品| 欧美成人福利视频| 亚洲欧美久久久久一区二区三区| 亚洲私人黄色宅男| 老司机午夜免费精品视频| 国产精品久久久久久久久久久久久久| 国产亚洲精品久久飘花 | 精品不卡一区| 日韩一级欧洲| 免费日韩av| 99re视频这里只有精品| 久久精品国产一区二区电影| 欧美日韩国产二区| 怡红院精品视频| 久久久精品一区二区三区| 亚洲校园激情| 欧美高清视频在线| 亚洲国产欧美一区二区三区同亚洲 | 亚洲精品偷拍| 老司机午夜免费精品视频| 国产亚洲欧洲| 久久综合九色综合网站| 亚洲欧美激情在线视频| 国产精品极品美女粉嫩高清在线 | 亚洲国产一区在线观看| 欧美成黄导航| 亚洲精品国精品久久99热| 久久人人爽人人| 久久久亚洲综合| 亚洲精品国产精品国产自| 亚洲国产精品视频| 国产精品亚洲一区| 久久九九热免费视频| 久久国产精品高清| 91久久精品一区| 亚洲永久免费精品| 黄色成人av在线| aa级大片欧美三级| 亚洲电影免费在线| 99国产精品久久久久老师| 国产日韩欧美一区| 亚洲精品网站在线播放gif| 国产综合色在线| 久久久国际精品| 亚洲国产精品一区二区www| 欧美激情一区二区在线| 欧美三级欧美一级| 麻豆精品91| 国产亚洲成人一区| 艳妇臀荡乳欲伦亚洲一区| 亚洲黄色精品| 久久九九国产精品| 久久久91精品国产一区二区三区| 欧美人成在线视频| 欧美国产先锋| 伊人春色精品| 久久久久免费视频| 久久伊人精品天天| 国产日韩欧美黄色| 亚洲欧美一区二区在线观看| 亚洲午夜激情网站| 欧美色网在线| 亚洲欧美bt| 欧美专区一区二区三区| 国产伦精品一区二区三区高清版 | 最新国产成人av网站网址麻豆| 亚洲免费视频成人| 欧美一区二区三区在线观看| 国产精品久久7| 亚洲专区一区二区三区| 欧美在线播放一区| 在线播放国产一区中文字幕剧情欧美 | 亚洲日韩欧美一区二区在线| 欧美极品在线播放| 亚洲午夜日本在线观看|