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:           指向的缓冲区的长度(以字节为单位)。
ai_canonname:     主机的规范名称。
ai_addr:             指向 sockaddr 结构的指针。每个返回的addrinfo结构中的ai_addr成员指向一个填充的套接字地址结构。
                           每个返回的addrinfo结构的长度(以字节为单位)在ai_addrlen成员中指定。

struct sockaddr {
ushort sa_family;
char sa_data[14];
};
struct sockaddr_in {
short sin_family; //指代协议族,在socket编程中只能是 AF_INET
u_short sin_port; //存储端口号(使用网络字节顺序)
struct in_addr sin_addr; //存储IP地址,使用in_addr这个数据结构
char sin_zero[8];//为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
};

ai_next:              指向链表中下一个结构的指针。此参数在链接列表的最后一个addrinfo结构中设置为NULL。

ai_flags:               指示在getaddrinfo函数中使用的选项的标志。

Value

Meaning


AI_PASSIVE

套接字地址将用于调用bind 函数


AI_CANONNAME

返回规范名称


AI_NUMERICHOST

传递给getaddrinfo函数的nodename参数必须是数字字符串。


AI_ALL

If this bit is set, a request is made for IPv6 addresses and IPv4 addresses with AI_V4MAPPED.


AI_ADDRCONFIG

只有配置了全局地址后,getaddrinfo才会解析。 IPv6和IPv4环回地址不被认为是有效的全局地址。


AI_V4MAPPED

如果对IPv6地址的getaddrinfo请求失败,则对IPv4地址进行名称服务请求,这些地址将转换为IPv4映射IPv6地址格式。


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:      协议类型。

Value Meaning

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_protocol成员的通用值,尽管其他许多值也是可能的。

ai_socktype:  套接字类型

Value

Meaning


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
基于数据报提供伪流包。

addrinfo 结构的更多相关文章

  1. addrinfo结构体原型-(转自 cxz2009)

    addrinfo结构体原型 typedef struct addrinfo {    int ai_flags;        //AI_PASSIVE,AI_CANONNAME,AI_NUMERIC ...

  2. 结构体addrinfo, sockaddr, sockaddr_in的区别

    struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 一.sockaddr sockaddr在头文件#include <sys/socket. ...

  3. 网络编程之addrinfo

    addrinfo结构体定义如下: typedef struct addrinfo { int ai_flags;//指示在getaddrinfo函数中使用的选项的标志. int ai_family; ...

  4. socket编程相关的结构体和字节序转换、IP、PORT转换函数

    注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换. 强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此转 ...

  5. 网络编程之getaddrinfo

    IPv4中使用gethostbyname()函数完成主机名到地址解析,但是该API不允许调用者指定所需地址类型的任何信息,返回的结构只包含 了用于存储IPv4地址的空间.为了解决该问题,IPv6中引入 ...

  6. [16]APUE:套接字

    [a] socket / socketpair #include <sys/socket.h> int socket(int domain, int type, int protocol) ...

  7. getaddrinfo function

    The getaddrinfo function provides protocol-independent translation from an ANSI host name to an addr ...

  8. getaddrinfo

    gethostbyname和gethostbyaddr这两个函数仅仅支持IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两 种转换,返回的是一个sockaddr结构的链表而不是一 ...

  9. glibc resolv/res_send.c getaddrinfo() buffer stack smash when dealing malformation big DNS Response Package

    catalogue . 漏洞简述 . 调试环境搭建 . 漏洞利用 . 漏洞分析 . 缓解修复方案 1. 漏洞简述 0x1: 函数调用顺序 getaddrinfo (getaddrinfo.c) -&g ...

随机推荐

  1. 前端mvc框架backbone.js入门

    关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以长久生存,通常都是有其特定优势和擅长点的. 使用backbone.js作为前端框架的应用通常都是htm ...

  2. Photoshop如何实现UI自动切图?

    切图严格来说并不是UI设计师的工作, 而是前端工程师的工作,指的是将UI设计师的设计(大部分为photoshop创建的PSD文件)转化为界面(网页或窗体等)所需要资源的过程.切图是衔接UI设计和应用程 ...

  3. Mega Dropdown - 带子分类的响应式下拉菜单

    当你在开发一个内容很多的 Web 项目的时候,最具挑战性的部分之一是为了如果更方便用户浏览这些内容.我们都能想到的一个例子是 Amazon,无限的类别以及它们的子类别.Mega Dropdown 是带 ...

  4. Vanilla Masker – 功能强大的输入过滤插件

    Vanilla Masker 是一个纯 JavaScript 实现的输入内容过滤和自动转换插件.现在你可以使用一个简单而纯粹的 JavaScript 库来控制你的 input 元素,而不需要加载 jQ ...

  5. 免费素材:包含 250+ 组件的 DO UI Kit

    DO UI kit 现在可以免费用于 Photoshop 和 Sketch 了.它有超过130个屏幕,10个完整的主题以及250+的组件混合以创造惊人的应用.他们都是再混合和视网膜.最重要的是他们看起 ...

  6. javascript --- 事件冒泡与事件捕获

    事件冒泡与事件捕获 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念都是为了解决页面中事件流(事件发生顺序)的问题.考虑下面这段代码,就不写html->head,body之类的代码了,自行 ...

  7. iOS加密之MD5加密

    话不多说,上代码! MyMD5.h里面 #import <Foundation/Foundation.h> @interface MyMD5 : NSObject { } +(NSStri ...

  8. 简单粗爆的解决同时布CRM引起的死锁问题

    和同事一起发布CRM引起CRM死锁,当然可以重启SQL Server不过有更简单的方法,直接执行下面的语句即可 sp_lock kill 58

  9. 全信号高清DVI编码器|上海视涛科技

    高清DVI编码器(E700)简介 高清DVI编码器是上海视涛科技出品的高性能全信号DVI编码产品.该DVI编码器是上海视涛科技完全自主研发,并适用于DVI信号的编码采集及网络传输的专用硬件设备.可兼容 ...

  10. spring理解

    Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...