簡體   English   中英

addinfo結構中ai_next和ai_addr的目的

[英]The purpose of ai_next and ai_addr inside the addrinfo struct

我正在自學套接字編程,我最近遇到了getaddrinfoaddrinfo結構。 從我的理解,多數在結構中的文件,你可以通過指定的宏,例如,如果我想使用整數AF_INET在我addrinfo結構,我想請指定AF_INET ,或整數2(我不知道這一點,它聲明了什么頭文件?)。 好吧,我不認為我完全理解為什么有一個sockaddr和指向另一個addrinfo的指針。 我被告知后者會創建一個鏈表,但它背后的目的是什么?

我建議始終使用類型名稱指定值。 它們在不同系統上可能不同。

getaddrinfo(3)手冊頁描述了addrinfo結構的字段,但是為了總結鏈表的工作方式,請考慮以下代碼:

for (struct addrinfo *ai = ...; ai != NULL; ai = ai->ai_next) {
  printf("address: %s -> %s\n", ai->ai_canonname,
         inet_ntop(ai->ai_family, ai->ai_addr, buf, buflen));
}

你從getaddrinfo回來的addrinfo*可能指向另一個,可能指向另一個,依此類推。 這就是它如何表示可以解析為多個不同IP的地址(用於負載平衡,雙棧IPv4 / IPv6等)。

好的,主要的問題是 - “它背后的原因是什么?”。 原因是,一個主機可以分配多個互聯網地址。 例如,如果您運行“主機www.google.com”命令,這將為您提供多個互聯網地址,因此多個addrinfo鏈接列表的重點是保留所有返回的互聯網地址,從而允許您正確翻譯網絡地址和服務。

當您編寫應用程序並嘗試連接到可能具有多個Internet地址的公共服務器時,這些鏈接的地址列表將使您可以靈活地連接到適當的接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM