addrinfo結構體定義如下:
typedef struct addrinfo addrinfoa, *paddrinfoa;
其中:
ai_addrlen: 指向的緩衝區的長度(以位元組為單位)。
ai_canonname: 主機的規範名稱。
每個返回的addrinfo結構的長度(以位元組為單位)在ai_addrlen成員中指定。
兩個結構體的內容:
struct sockaddr ;ai_flags:struct sockaddr_in ;
ai_passive 套接字位址將用於呼叫bind 函式
ai_canonname 返回規範名稱
ai_numerichost 傳遞給getaddrinfo函式的nodename引數必須是數字字串。
ai_addrconfig 只有配置了全域性位址後,getaddrinfo才會解析。 ipv6和ipv4環迴位址不被認為是有效的全域性位址。
ai_non_authoritative 位址資訊可以來自非授權命名空間提供商
ai_secure 位址資訊來自安全通道。
ai_return_preferred_names 位址資訊是用於使用者的優選名稱。
ai_fqdn getaddrinfo將返回名稱最終解析為的完全限定網域名稱。 完全限定網域名稱在ai_canonname成員中返回。
這與ai_canonname位標記不同,後者返回在dns中註冊的規範名稱,該名稱可能與平面名稱解析為的完全限定網域名稱不同。
只能設定ai_fqdn和ai_canonname位中的乙個。 如果eai_badflags同時存在這兩個標誌,getaddrinfo函式將失敗。
ai_fileserver 命名空間提供程式提示正在查詢的主機名正在檔案共享方案中使用。 命名空間提供程式可以忽略此提示。
ai_family: the address family.
af_unspec 位址系列未指定。
af_inet ipv4 address family.
af_netbios netbios位址系列。
af_inet6 ipv6 address family.
af_irda the infrared data association address family.
af_bth bluetooth address family.
ai_protocol: 協議型別。
ipproto_tcp 傳輸控制協議(tcp)。 當ai_family成員為af_inet或af_inet6且ai_socktype成員為
sock_stream時,這是乙個可能的值
ipproto_udp 使用者資料報協議(udp)。 當ai_family成員為af_inet或af_inet6且型別引數為sock_dgram
時,這是乙個可能的值。
ipproto_rm pgm協議用於可靠的組播。 當ai_family成員為af_inet且ai_socktype成員為sock_rdm時,
這是乙個可能的值。 在為windows vista及更高版本發布的windows sdk上,此值也稱為
ipproto_pgm。
可能的選項特定於指定的位址系列和套接字型別。
如果為ai_protocol指定了值0,則呼叫者不希望指定協議,服務提供者將選擇要使用的ai_protocol。 對於ipv4和ipv6之外的協議,將ai_protocol設定為零。
ai_socktype: 套接字類
sock_stream 使用oob資料傳輸機制提供順序,可靠,雙向,基於連線的位元組流。使用internet位址系列
(af_inet或af_inet6)的傳輸控制協議(tcp)。如果ai_family成員是af_irda,則
sock_stream是唯一支援的套接字型別。
sock_dgram 支援資料報,它是無連線的,不可靠的固定(通常小)最大長度的緩衝區。對internet位址
系列(af_inet或af_inet6)使用使用者資料報協議(udp)。
sock_raw 提供乙個原始套接字,允許應用程式處理下乙個上層協議頭。要操作ipv4標頭,必須在套接
字上設定ip_hdrincl套接字選項。要操作ipv6頭,必須在套接字上設定ipv6_hdrincl套接
字選項。
sock_rdm 提供可靠的訊息資料報。這種型別的示例是在windows中的實用通用多播(pgm)多播協議實
現,通常被稱為可靠多播節目。
sock_seqpacket 基於資料報提供偽流包。
網路程式設計 之 網路基礎
網路程式設計 1.乙個程式如何在網路上找到另乙個程式?首先,程式必須要啟動,其次,必須有這台機器位址,我們都知道我們人的位址大概就是國家 省 市 區 街道 樓 門牌號這樣子。那麼每一台聯網的機器在網路上也有自己的位址,他們位址是怎麼表示的呢?就是使用一串數字來表示的,例如 100.4.5.6什麼是i...
網路程式設計之Socket程式設計
對 tcp ip udp socket 程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission co...
網路程式設計之socket程式設計
大多數專案是在linux下開發伺服器端,而在windows下開發客戶端,需要經常在兩大平台之間進行切換,單獨學習一種平台沒有實踐意義。值得欣慰的是,兩大平台下的 socket 程式設計非常相似,並不會增加多少學習成本。網路程式設計就是編寫程式使兩台聯網的計算機相互交換資料。這就是socket的全部內...