WSAPROTOCOL_INFOA 结构 (winsock2.h)
WSAPROTOCOL_INFO 结构用于存储或检索给定协议的完整信息。
语法
typedef struct _WSAPROTOCOL_INFOA {
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
CHAR szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
成员
dwServiceFlags1
类型:DWORD
描述协议提供的服务的位掩码。 此成员的可能值在 Winsock2.h 头文件中定义。
以下值是可能的。
值 | 含义 |
---|---|
|
提供无连接 (数据报) 服务。 如果未设置,则协议支持面向连接的数据传输。 |
|
保证发送的所有数据都将到达预期目标。 |
|
保证数据仅按发送顺序到达,且不会重复。 此特征并不一定意味着始终传递数据,但传递的任何数据都按发送顺序传递。 |
|
遵循消息边界,而不是没有消息边界概念的面向流的协议。 |
|
面向消息的协议,但对于所有回执,将忽略消息边界。 当应用程序不希望协议完成消息帧时,这很方便。 |
|
支持两阶段 (正常) 关闭。 如果未设置,则仅执行中止关闭。 |
|
支持快速 (紧急) 数据。 |
|
支持连接数据。 |
|
支持断开连接数据。 |
|
支持广播机制。 |
|
支持多点或多播机制。 控制平面和数据平面属性如下所示。 |
|
指示控制平面是根 (值 = 1) 还是非根 (值 = 0) 。 |
|
指示数据平面是根 (值 = 1) 还是非根 (值 = 0) 。 |
|
支持服务质量请求。 |
|
位是保留的。 |
|
协议在发送方向上是单向的。 |
|
协议在 recv 方向上是单向的。 |
|
提供程序返回的套接字描述符是操作系统可安装文件系统 (IFS) 句柄。 |
|
WSASend 和 WSASendTo 支持 MSG_PARTIAL 标志。 |
|
该协议为 SAN 提供支持。
Windows 7 和 Windows Server 2008 R2 支持此值。 |
dwServiceFlags2
类型:DWORD
保留给其他协议属性定义。
dwServiceFlags3
类型:DWORD
保留给其他协议属性定义。
dwServiceFlags4
类型:DWORD
保留给其他协议属性定义。
dwProviderFlags
类型:DWORD
一组标志,提供有关如何在 Winsock 目录中表示此协议的信息。 此成员的可能值在 Winsock2.h 头文件中定义。
可以使用以下标志值。
值 | 含义 |
---|---|
|
指示这是单个协议 (来自给定提供程序) 的两个或多个条目之一,该提供程序能够实现多个行为。 一个示例是 SPX,在接收端,它的行为可以是面向消息的协议,也可以是面向流的协议。 |
|
指示这是能够实现多个行为的协议的建议或最常用的条目。 |
|
由提供程序设置,以指示 Ws2_32.dll 不应在 WSAEnumProtocols 生成的结果缓冲区中返回此协议。 显然,Windows 套接字 2 应用程序绝不应看到具有此位集的条目。 |
|
指示 socket 或 WSASocket的协议参数中的值零与此协议条目匹配。 |
|
由提供程序设置以指示支持网络直接访问。
Windows 7 和 Windows Server 2008 R2 支持此值。 |
ProviderId
类型: GUID
服务提供商供应商) 分配给提供程序的 GUID (全局唯一标识符。 此值对于多个服务提供商能够实现特定协议的实例很有用。 应用程序可以使用 ProviderId 成员来区分本来无法区分的提供程序。
dwCatalogEntryId
类型:DWORD
由 WS2_32.DLL 为每个WSAPROTOCOL_INFO结构分配的唯 一 标识符。
ProtocolChain
类型: WSAPROTOCOLCHAIN
与协议关联的 WSAPROTOCOLCHAIN 结构。 如果链的长度为 0,则此 WSAPROTOCOL_INFO 项表示具有 Windows 套接字 2 SPI 作为其上边缘和下边缘的分层协议。 如果链的长度等于 1,则此条目表示其目录项标识符位于 WSAPROTOCOL_INFO 结构的 dwCatalogEntryId 成员中的基本协议。 如果链的长度大于 1,则此条目表示一个协议链,该链由基协议之上的一个或多个分层协议组成。 相应的目录条目标识符位于 ProtocolChain.ChainEntries 数组中,从顶部的分层协议开始, (ProtocolChain.ChainEntries 数组中的零元素) ,以基本协议结束。 有关协议链的详细信息,请参阅 Windows 套接字 2 服务提供程序接口规范。
iVersion
类型: int
协议版本标识符。
iAddressFamily
类型: int
要作为地址系列参数传递给 套接字 或 WSASocket 函数的值,以便为此协议打开套接字。 此值还唯一定义协议使用的 sockaddr 的协议地址结构。
在 Windows Vista 及更高版本发布的Windows SDK中,地址系列的可能值在 Ws2def.h 头文件中定义。 请注意, Ws2def.h 头文件会自动包含在 Winsock2.h 中,永远不应直接使用。
在 Windows Server 2003 及更早版本的 Platform SDK 上,地址系列的可能值在 Winsock2.h 头文件中定义。
当前支持的值是 AF_INET 或 AF_INET6,它们是 IPv4 和 IPv6 的 Internet 地址系列格式。 用于 NetBIOS 的地址系列 (AF_NETBIOS 的其他选项,例如,如果安装了地址系列的 Windows 套接字服务提供商,则支持) 。 请注意,AF_地址系列和PF_协议系列常量的值 (相同,例如 ,AF_INET 和 PF_INET) ,因此可以使用任一常量。
下表列出了地址系列的常见值,尽管许多其他值是可能的。
iAddressFamily | 含义 |
---|---|
|
Internet 协议版本 4 (IPv4) 地址系列。 |
|
IPX/SPX 地址系列。 仅当安装了 NWLink IPX/SPX NetBIOS 兼容传输协议时,才支持此地址系列。
Windows Vista 及更高版本不支持此地址系列。 |
|
AppleTalk 地址系列。 仅当安装了 AppleTalk 协议时,才支持此地址系列。
Windows Vista 及更高版本不支持此地址系列。 |
|
NetBIOS 地址系列。 仅当安装了适用于 NetBIOS 的 Windows 套接字提供程序时,才支持此地址系列。
32 位版本的 Windows 支持 NetBIOS 的 Windows 套接字提供程序。 默认情况下,此提供程序安装在 32 位版本的 Windows 上。 64 位版本的 Windows 不支持 NetBIOS 的 Windows 套接字提供程序,包括 Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 或 Windows XP。 适用于 NetBIOS 的 Windows 套接字提供程序仅支持 类型 参数设置为 SOCK_DGRAM的套接字。 适用于 NetBIOS 的 Windows 套接字提供程序与 NetBIOS 编程接口不直接相关。 Windows Vista、Windows Server 2008 及更高版本不支持 NetBIOS 编程接口。 |
|
Internet 协议版本 6 (IPv6) 地址系列。 |
|
IrDA (IrDA) 地址系列。
仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。 |
|
蓝牙地址系列。
如果计算机安装了蓝牙适配器和驱动程序,则 SP2 或更高版本的 Windows XP 支持此地址系列。 |
iMaxSockAddr
类型: int
最大地址长度(以字节为单位)。
iMinSockAddr
类型: int
最小地址长度(以字节为单位)。
iSocketType
类型: int
要作为套接字类型参数传递给 套接字 或 WSASocket 函数的值,以便为此协议打开套接字。 套接字类型的可能值在 Winsock2.h 头文件中定义。
下表列出了 Windows 套接字 2 支持的 iSocketType 成员的可能值:
iSocketType | 含义 |
---|---|
|
一种套接字类型,它通过 OOB 数据传输机制提供排序的、可靠的双向、基于连接的字节流。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用传输控制协议 (TCP) 。 |
|
支持数据报的套接字类型,这些数据报是固定 (通常较小) 最大长度的无连接、不可靠的缓冲区。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用用户数据报协议 (UDP) 。 |
|
一种套接字类型,它提供允许应用程序操作下一层协议标头的原始套接字。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。 |
|
提供可靠消息数据报的套接字类型。 此类型的一个示例是 Windows 中的实用常规多播 (PGM) 多播协议实现,通常称为 可靠多播编程。
仅当安装了可靠多播协议时,才支持此值。 |
|
提供基于数据报的伪流数据包的套接字类型。 |
iProtocol
类型: int
要作为 协议 参数传递给 套接字 或 WSASocket 函数的值,以便打开此协议的套接字。 iProtocol 成员的可能选项特定于指定的地址系列和套接字类型。
在为 Windows Vista 及更高版本发布的 Windows SDK上,此成员可以是 Ws2def.h 头文件中定义的 IPPROTO 枚举类型的值之一。 请注意, Ws2def.h 头文件自动包含在 Winsock2.h 中,不应直接使用。
在适用于 Windows Server 2003 及更早版本的平台 SDK 上, iProtocol 成员的可能值在 Winsock2.h 和 Wsrm.h 头文件中定义。
下表列出了 iProtocol 的常见值,尽管许多其他值是可能的。
iProtocolMaxOffset
类型: int
向 socket 或 WSASocket 函数提供协议参数的值时,可以添加到 iProtocol 的最大值。 并非所有协议都允许一系列值。 在这种情况下, iProtocolMaxOffset 为零。
iNetworkByteOrder
类型: int
目前,这些值是 BIGENDIAN 和 LITTLEENDIAN) (清单常量,分别指示值为 0 和 1 的 big-endian 或 little-endian。
iSecurityScheme
类型: int
如果有任何) , (采用的安全方案类型。 值 SECURITY_PROTOCOL_NONE (0) 用于不包含安全条款的协议。
dwMessageSize
类型:DWORD
协议支持的最大消息大小(以字节为单位)。 这是可从任何主机的本地接口发送的最大大小。 对于不支持消息帧的协议,可以发送到给定地址的实际最大值可能更少。 没有用于确定最大入站消息大小的标准预配。 定义了以下特殊值。
值 | 含义 |
---|---|
|
协议面向流,因此消息大小的概念不相关。 |
|
最大出站 (发送) 消息大小取决于基础网络 MTU (最大传输单元) ,因此直到绑定套接字后才能知道。 在套接字绑定到本地地址后,应用程序应使用 getsockopt 检索 SO_MAX_MSG_SIZE 的值。 |
|
协议面向消息,但对可能传输的消息大小没有最大限制。 |
dwProviderReserved
类型:DWORD
保留供服务提供商使用。
szProtocol[WSAPROTOCOL_LEN + 1]
类型: TCHAR[WSAPROTOCOL_LEN+1]
一个字符数组,其中包含标识协议的可读名称,例如“MSAFD Tcpip [UDP/IP]”。 允许的最大字符数为 WSAPROTOCOL_LEN,定义为 255。
注解
注意
winsock2.h 标头将WSAPROTOCOL_INFO定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | winsock2.h |