網路程式設計之addrinfo

2021-09-02 14:00:04 字數 2411 閱讀 2042

addrinfo結構體定義如下:

typedef struct addrinfo  addrinfoa, *paddrinfoa;
其中:

ai_addrlen:     指向的緩衝區的長度(以位元組為單位)。

ai_canonname: 主機的規範名稱。

每個返回的addrinfo結構的長度(以位元組為單位)在ai_addrlen成員中指定。

兩個結構體的內容:

struct sockaddr ;

struct sockaddr_in ;

ai_flags:

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的全部內...