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;
} ADDRINFOA, *PADDRINFOA;
ai_addrlen:??? ?????? 指向的緩沖區(qū)的長(zhǎng)度(以字節(jié)為單位)。
ai_canonname: ? ? 主機(jī)的規(guī)范名稱(chēng)。
ai_addr: ? ? ? ? ? ? 指向?sockaddr?結(jié)構(gòu)的指針。每個(gè)返回的addrinfo結(jié)構(gòu)中的ai_addr成員指向一個(gè)填充的套接字地址結(jié)構(gòu)。
? ? ? ? ? ? ? ? ? ? ? ? ? ?每個(gè)返回的addrinfo結(jié)構(gòu)的長(zhǎng)度(以字節(jié)為單位)在ai_addrlen成員中指定。
| struct sockaddr { ushort sa_family; char sa_data[14]; }; |
| struct sockaddr_in { short sin_family; //指代協(xié)議族,在socket編程中只能是 AF_INET u_short sin_port; //存儲(chǔ)端口號(hào)(使用網(wǎng)絡(luò)字節(jié)順序) struct in_addr sin_addr; //存儲(chǔ)IP地址,使用in_addr這個(gè)數(shù)據(jù)結(jié)構(gòu) char sin_zero[8];//為了讓sockaddr與sockaddr_in兩個(gè)數(shù)據(jù)結(jié)構(gòu)保持大小相同而保留的空字節(jié)。 }; |
ai_next: ? ? ? ? ? ? ?指向鏈表中下一個(gè)結(jié)構(gòu)的指針。此參數(shù)在鏈接列表的最后一個(gè)addrinfo結(jié)構(gòu)中設(shè)置為NULL。
?
ai_flags: ? ? ? ? ? ? ? 指示在getaddrinfo函數(shù)中使用的選項(xiàng)的標(biāo)志。
| Value | Meaning |
| AI_PASSIVE | 套接字地址將用于調(diào)用bind 函數(shù) |
| AI_CANONNAME | 返回規(guī)范名稱(chēng) |
| AI_NUMERICHOST | 傳遞給getaddrinfo函數(shù)的nodename參數(shù)必須是數(shù)字字符串。 |
| AI_ALL | If this bit is set, a request is made for IPv6 addresses and IPv4 addresses with?AI_V4MAPPED. |
| AI_ADDRCONFIG | 只有配置了全局地址后,getaddrinfo才會(huì)解析。 IPv6和IPv4環(huán)回地址不被認(rèn)為是有效的全局地址。 |
| AI_V4MAPPED | 如果對(duì)IPv6地址的getaddrinfo請(qǐng)求失敗,則對(duì)IPv4地址進(jìn)行名稱(chēng)服務(wù)請(qǐng)求,這些地址將轉(zhuǎn)換為IPv4映射IPv6地址格式。 |
| AI_NON_AUTHORITATIVE | 地址信息可以來(lái)自非授權(quán)命名空間提供商 |
| AI_SECURE | 地址信息來(lái)自安全信道。 |
| AI_RETURN_PREFERRED_NAMES | 地址信息是用于用戶(hù)的優(yōu)選名稱(chēng)。 |
| AI_FQDN | getaddrinfo將返回名稱(chēng)最終解析為的完全限定域名。 完全限定域名在ai_canonname成員中返回。 這與AI_CANONNAME位標(biāo)記不同,后者返回在DNS中注冊(cè)的規(guī)范名稱(chēng),該名稱(chēng)可能與平面名稱(chēng)解析為的完全限定域名不同。 只能設(shè)置AI_FQDN和AI_CANONNAME位中的一個(gè)。 如果EAI_BADFLAGS同時(shí)存在這兩個(gè)標(biāo)志,getaddrinfo函數(shù)將失敗。 |
| AI_FILESERVER | 命名空間提供程序提示正在查詢(xún)的主機(jī)名正在文件共享方案中使用。 命名空間提供程序可以忽略此提示。 |
?
?
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:? ? ? 協(xié)議類(lèi)型。
| Value | Meaning |
| IPPROTO_TCP | 傳輸控制協(xié)議(TCP)。 當(dāng)ai_family成員為AF_INET或AF_INET6且ai_socktype成員為SOCK_STREAM時(shí),這是一個(gè)可能的值 |
| IPPROTO_UDP | 用戶(hù)數(shù)據(jù)報(bào)協(xié)議(UDP)。 當(dāng)ai_family成員為AF_INET或AF_INET6且類(lèi)型參數(shù)為SOCK_DGRAM時(shí),這是一個(gè)可能的值。 |
| IPPROTO_RM | PGM協(xié)議用于可靠的組播。 當(dāng)ai_family成員為AF_INET且ai_socktype成員為SOCK_RDM時(shí),這是一個(gè)可能的值。 在為Windows Vista及更高版本發(fā)布的Windows SDK上,此值也稱(chēng)為IPPROTO_PGM。 |
可能的選項(xiàng)特定于指定的地址系列和套接字類(lèi)型。
如果為ai_protocol指定了值0,則調(diào)用者不希望指定協(xié)議,服務(wù)提供者將選擇要使用的ai_protocol。 對(duì)于IPv4和IPv6之外的協(xié)議,將ai_protocol設(shè)置為零。
下表列出了ai_protocol成員的通用值,盡管其他許多值也是可能的。
?
ai_socktype: 套接字類(lèi)型
| Value | Meaning |
| SOCK_STREAM | 使用OOB數(shù)據(jù)傳輸機(jī)制提供順序,可靠,雙向,基于連接的字節(jié)流。使用Internet地址系列(AF_INET或AF_INET6)的傳輸控制協(xié)議(TCP)。如果ai_family成員是AF_IRDA,則SOCK_STREAM是唯一支持的套接字類(lèi)型。 |
| SOCK_DGRAM | 支持?jǐn)?shù)據(jù)報(bào),它是無(wú)連接的,不可靠的固定(通常小)最大長(zhǎng)度的緩沖區(qū)。對(duì)Internet地址系列(AF_INET或AF_INET6)使用用戶(hù)數(shù)據(jù)報(bào)協(xié)議(UDP)。 |
| SOCK_RAW | 提供一個(gè)原始套接字,允許應(yīng)用程序處理下一個(gè)上層協(xié)議頭。要操作IPv4標(biāo)頭,必須在套接字上設(shè)置IP_HDRINCL套接字選項(xiàng)。要操作IPv6頭,必須在套接字上設(shè)置IPV6_HDRINCL套接字選項(xiàng)。 |
| SOCK_RDM | 提供可靠的消息數(shù)據(jù)報(bào)。這種類(lèi)型的示例是在Windows中的實(shí)用通用多播(PGM)多播協(xié)議實(shí)現(xiàn),通常被稱(chēng)為可靠多播節(jié)目。 |
| SOCK_SEQPACKET | 基于數(shù)據(jù)報(bào)提供偽流包。 |
轉(zhuǎn)載于:https://www.cnblogs.com/yunqie/p/6102327.html
總結(jié)
以上是生活随笔為你收集整理的addrinfo 结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: layui-简单辅助元素 - 页面元素
- 下一篇: 将win server 2003 AD域