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

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>
            亚洲黄色高清| 欧美破处大片在线视频| 美女视频网站黄色亚洲| 久久精彩视频| 你懂的亚洲视频| 91久久夜色精品国产九色| 久久久人成影片一区二区三区| 欧美一级播放| 免费成人av在线看| 亚洲国产精品va在看黑人| 日韩一级大片在线| 性刺激综合网| 免费成人高清视频| 欧美日韩在线播放三区四区| 国产精品日本| 亚洲电影av在线| 亚洲免费久久| 欧美资源在线观看| 亚洲国产精品成人久久综合一区| 日韩亚洲欧美综合| 久久久91精品| 国产精品免费观看视频| 亚洲国产专区校园欧美| 欧美一级片久久久久久久| 亚洲第一黄色| 亚洲欧美不卡| 欧美激情一区在线| 伊人久久av导航| 亚洲欧美日韩中文视频| 亚洲第一二三四五区| 欧美中文字幕在线| 欧美午夜精品一区| 亚洲精品小视频| 久久综合一区| 午夜在线观看免费一区| 欧美日韩在线精品| 亚洲国产成人午夜在线一区| 欧美在线观看视频一区二区| 99精品欧美| 欧美精品久久久久久久免费观看 | 欧美a级一区二区| 一本久久a久久精品亚洲| 久久免费偷拍视频| 国产欧美日韩视频| 亚洲一区二区在线观看视频| 亚洲国产精品ⅴa在线观看| 久久国产精品99久久久久久老狼 | 国产精品久久久久久久久久免费 | 国内精品福利| 欧美一区国产一区| 亚洲自拍偷拍网址| 国产精品激情av在线播放| 日韩视频免费在线| 亚洲黑丝在线| 欧美成人免费网| 亚洲精品国产欧美| 欧美福利电影在线观看| 浪潮色综合久久天堂| 亚洲春色另类小说| 欧美高清视频在线观看| 美女黄网久久| 日韩亚洲综合在线| 99国产精品99久久久久久| 欧美午夜无遮挡| 欧美亚洲三区| 欧美自拍丝袜亚洲| 亚洲高清免费| 亚洲人成网站在线观看播放| 欧美精品v日韩精品v韩国精品v| 亚洲精品在线免费观看视频| 亚洲国产一区二区a毛片| 欧美日韩的一区二区| 一区二区三区www| 亚洲午夜一区二区三区| 国产精品一二三| 久久久蜜桃一区二区人| 久热国产精品| 亚洲在线电影| 久久精品视频在线播放| 亚洲精品国久久99热| 日韩视频一区二区在线观看 | 欧美四级剧情无删版影片| 亚洲欧美日韩精品久久亚洲区| 亚洲男女自偷自拍| 国产亚洲一区精品| 欧美国产视频日韩| 欧美日本高清视频| 亚洲综合社区| 欧美专区日韩视频| 一本久久知道综合久久| 性欧美暴力猛交69hd| 91久久精品一区| 亚洲综合日韩在线| 亚洲肉体裸体xxxx137| 亚洲少妇中出一区| 亚洲高清视频在线观看| 制服丝袜亚洲播放| 亚洲欧洲一级| 亚洲欧美日韩一区二区三区在线观看 | 亚洲日韩第九十九页| 国产日本欧美一区二区| 亚洲国产一区二区三区a毛片| 国产精品久久亚洲7777| 欧美国产日韩精品| 国产一区二区三区网站| 洋洋av久久久久久久一区| 在线观看欧美精品| 亚洲欧美日韩视频二区| 9i看片成人免费高清| 久久久福利视频| 欧美在线啊v一区| 欧美午夜影院| 日韩午夜中文字幕| 亚洲欧洲视频在线| 久久av资源网站| 午夜影院日韩| 欧美日韩国产高清视频| 欧美高清免费| 黄网站色欧美视频| 小辣椒精品导航| 亚洲欧美日本国产有色| 欧美日本久久| 亚洲激情成人| 亚洲国产精品一区二区三区| 欧美综合国产精品久久丁香| 性娇小13――14欧美| 欧美三级日本三级少妇99| 亚洲精品欧美极品| 一本一本久久a久久精品综合麻豆| 玖玖国产精品视频| 欧美成人自拍视频| 亚洲黄色成人网| 欧美国产乱视频| 亚洲日本成人在线观看| 亚洲精品国产精品国自产观看| 麻豆精品视频| 亚洲国产美国国产综合一区二区| 亚洲激情一区二区| 欧美激情在线免费观看| 亚洲毛片在线看| 亚洲一区二区三区在线观看视频| 欧美视频官网| 亚洲欧美成人一区二区在线电影| 亚洲欧美日韩国产| 国产精品网站在线播放| 欧美亚洲视频在线看网址| 久久久久久久久久久久久女国产乱| 国产欧美一区二区三区国产幕精品| 亚洲自拍偷拍麻豆| 美女精品国产| 亚洲五月六月| 国产色视频一区| 欧美一区精品| 老鸭窝毛片一区二区三区| 国产真实乱子伦精品视频| 久久九九久精品国产免费直播| 免费看成人av| 日韩午夜中文字幕| 国产精品一区二区在线| 久久大综合网| 亚洲国产日韩欧美在线图片| 亚洲图片在线观看| 国产亚洲欧美一区| 欧美激情第二页| 亚洲伊人久久综合| 蜜臀久久99精品久久久久久9| 亚洲国产婷婷| 国产麻豆9l精品三级站| 麻豆精品传媒视频| 亚洲一区二区伦理| 蜜桃精品一区二区三区| 一区二区日本视频| 国产在线一区二区三区四区| 欧美激情在线有限公司| 午夜精品亚洲一区二区三区嫩草| 欧美大香线蕉线伊人久久国产精品| 99re6热在线精品视频播放速度| 国产精品久久久久久久浪潮网站 | 欧美国产日韩一区二区三区| 亚洲综合日本| 亚洲欧洲日本在线| 国产自产精品| 国产精品久久7| 欧美第一黄网免费网站| 欧美在线你懂的| 亚洲网友自拍| 亚洲精品日韩综合观看成人91| 久久久久久久999精品视频| 亚洲特级毛片| 亚洲精品免费在线播放| 国产一区成人| 国产毛片精品国产一区二区三区| 欧美精品久久久久久久久久| 久久亚洲精选| 久久国产精品亚洲va麻豆| 亚洲视频你懂的| 正在播放日韩| 在线亚洲+欧美+日本专区| 日韩午夜免费| 亚洲毛片一区|