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 头文件中定义。

以下值是可能的。

含义
XP1_CONNECTIONLESS
0x00000001
提供无连接 (数据报) 服务。 如果未设置,则协议支持面向连接的数据传输。
XP1_GUARANTEED_DELIVERY
0x00000002
保证发送的所有数据都将到达预期目标。
XP1_GUARANTEED_ORDER
0x00000004
保证数据仅按发送顺序到达,且不会重复。 此特征并不一定意味着始终传递数据,但传递的任何数据都按发送顺序传递。
XP1_MESSAGE_ORIENTED
0x00000008
遵循消息边界,而不是没有消息边界概念的面向流的协议。
XP1_PSEUDO_STREAM
0x00000010
面向消息的协议,但对于所有回执,将忽略消息边界。 当应用程序不希望协议完成消息帧时,这很方便。
XP1_GRACEFUL_CLOSE
0x00000020
支持两阶段 (正常) 关闭。 如果未设置,则仅执行中止关闭。
XP1_EXPEDITED_DATA
0x00000040
支持快速 (紧急) 数据。
XP1_CONNECT_DATA
0x00000080
支持连接数据。
XP1_DISCONNECT_DATA
0x00000100
支持断开连接数据。
XP1_SUPPORT_BROADCAST
0x00000200
支持广播机制。
XP1_SUPPORT_MULTIPOINT
0x00000400
支持多点或多播机制。 控制平面和数据平面属性如下所示。
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
指示控制平面是根 (值 = 1) 还是非根 (值 = 0) 。
XP1_MULTIPOINT_DATA_PLANE
0x00001000
指示数据平面是根 (值 = 1) 还是非根 (值 = 0) 。
XP1_QOS_SUPPORTED
0x00002000
支持服务质量请求。
XP1_INTERRUPT
位是保留的。
XP1_UNI_SEND
0x00008000
协议在发送方向上是单向的。
XP1_UNI_RECV
0x00010000
协议在 recv 方向上是单向的。
XP1_IFS_HANDLES
0x00020000
提供程序返回的套接字描述符是操作系统可安装文件系统 (IFS) 句柄。
XP1_PARTIAL_MESSAGE
0x00040000
WSASend 和 WSASendTo 支持 MSG_PARTIAL 标志。
XP1_SAN_SUPPORT_SDP
0x00080000
该协议为 SAN 提供支持。

Windows 7 和 Windows Server 2008 R2 支持此值。

 
注意 只能设置XP1_UNI_SEND值或XP1_UNI_RECV值之一。 如果协议在任一方向上可以是单向的,则应使用两 个WSAPROTOCOL_INFOW 结构。 如果未设置这两个位,则协议被视为双向协议。
 

dwServiceFlags2

类型:DWORD

保留给其他协议属性定义。

dwServiceFlags3

类型:DWORD

保留给其他协议属性定义。

dwServiceFlags4

类型:DWORD

保留给其他协议属性定义。

dwProviderFlags

类型:DWORD

一组标志,提供有关如何在 Winsock 目录中表示此协议的信息。 此成员的可能值在 Winsock2.h 头文件中定义。

可以使用以下标志值。

含义
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
指示这是单个协议 (来自给定提供程序) 的两个或多个条目之一,该提供程序能够实现多个行为。 一个示例是 SPX,在接收端,它的行为可以是面向消息的协议,也可以是面向流的协议。
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
指示这是能够实现多个行为的协议的建议或最常用的条目。
PFL_HIDDEN
0x00000004
由提供程序设置,以指示 Ws2_32.dll 不应在 WSAEnumProtocols 生成的结果缓冲区中返回此协议。 显然,Windows 套接字 2 应用程序绝不应看到具有此位集的条目。
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
指示 socketWSASocket的协议参数中的值零与此协议条目匹配。
PFL_NETWORKDIRECT_PROVIDER
0x00000010
由提供程序设置以指示支持网络直接访问。

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_INETPF_INET) ,因此可以使用任一常量。

下表列出了地址系列的常见值,尽管许多其他值是可能的。

iAddressFamily 含义
AF_INET
2
Internet 协议版本 4 (IPv4) 地址系列。
AF_IPX
6
IPX/SPX 地址系列。 仅当安装了 NWLink IPX/SPX NetBIOS 兼容传输协议时,才支持此地址系列。

Windows Vista 及更高版本不支持此地址系列。

AF_APPLETALK
16
AppleTalk 地址系列。 仅当安装了 AppleTalk 协议时,才支持此地址系列。

Windows Vista 及更高版本不支持此地址系列。

AF_NETBIOS
17
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 编程接口。

AF_INET6
23
Internet 协议版本 6 (IPv6) 地址系列。
AF_IRDA
26
IrDA (IrDA) 地址系列。

仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。

AF_BTH
32
蓝牙地址系列。

如果计算机安装了蓝牙适配器和驱动程序,则 SP2 或更高版本的 Windows XP 支持此地址系列。

iMaxSockAddr

类型: int

最大地址长度(以字节为单位)。

iMinSockAddr

类型: int

最小地址长度(以字节为单位)。

iSocketType

类型: int

要作为套接字类型参数传递给 套接字WSASocket 函数的值,以便为此协议打开套接字。 套接字类型的可能值在 Winsock2.h 头文件中定义。

下表列出了 Windows 套接字 2 支持的 iSocketType 成员的可能值:

iSocketType 含义
SOCK_STREAM
1
一种套接字类型,它通过 OOB 数据传输机制提供排序的、可靠的双向、基于连接的字节流。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用传输控制协议 (TCP) 。
SOCK_DGRAM
2
支持数据报的套接字类型,这些数据报是固定 (通常较小) 最大长度的无连接、不可靠的缓冲区。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用用户数据报协议 (UDP) 。
SOCK_RAW
3
一种套接字类型,它提供允许应用程序操作下一层协议标头的原始套接字。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。
SOCK_RDM
4
提供可靠消息数据报的套接字类型。 此类型的一个示例是 Windows 中的实用常规多播 (PGM) 多播协议实现,通常称为 可靠多播编程

仅当安装了可靠多播协议时,才支持此值。

SOCK_SEQPACKET
5
提供基于数据报的伪流数据包的套接字类型。

iProtocol

类型: int

要作为 协议 参数传递给 套接字WSASocket 函数的值,以便打开此协议的套接字。 iProtocol 成员的可能选项特定于指定的地址系列和套接字类型。

在为 Windows Vista 及更高版本发布的 Windows SDK上,此成员可以是 Ws2def.h 头文件中定义的 IPPROTO 枚举类型的值之一。 请注意, Ws2def.h 头文件自动包含在 Winsock2.h 中,不应直接使用。

在适用于 Windows Server 2003 及更早版本的平台 SDK 上, iProtocol 成员的可能值在 Winsock2.hWsrm.h 头文件中定义。

下表列出了 iProtocol 的常见值,尽管许多其他值是可能的。

iProtocol 含义
IPPROTO_ICMP
1
Internet 控制消息协议 (ICMP) 。

此值在 Windows XP 及更高版本上受支持。

IPPROTO_IGMP
2
Internet 组管理协议 (IGMP) 。

此值在 Windows XP 及更高版本上受支持。

BTHPROTO_RFCOMM
3
蓝牙射频通信 (蓝牙 RFCOMM) 协议。

使用 SP2 或更高版本的 Windows XP 支持此值。

IPPROTO_TCP
6
传输控制协议 (TCP) 。
IPPROTO_UDP
17
用户数据报协议 (UDP) 。
IPPROTO_ICMPV6
58
Internet 控制消息协议版本 6 (ICMPv6) 。

此值在 Windows XP 及更高版本上受支持。

IPPROTO_RM
113
用于可靠多播的 PGM 协议。 在为 Windows Vista 及更高版本发布的Windows SDK上,此协议也称为IPPROTO_PGM

仅当安装了可靠多播协议时,才支持此值。

iProtocolMaxOffset

类型: int

socketWSASocket 函数提供协议参数的值时,可以添加到 iProtocol 的最大值。 并非所有协议都允许一系列值。 在这种情况下, iProtocolMaxOffset 为零。

iNetworkByteOrder

类型: int

目前,这些值是 BIGENDIAN 和 LITTLEENDIAN) (清单常量,分别指示值为 0 和 1 的 big-endian 或 little-endian。

iSecurityScheme

类型: int

如果有任何) , (采用的安全方案类型。 值 SECURITY_PROTOCOL_NONE (0) 用于不包含安全条款的协议。

dwMessageSize

类型:DWORD

协议支持的最大消息大小(以字节为单位)。 这是可从任何主机的本地接口发送的最大大小。 对于不支持消息帧的协议,可以发送到给定地址的实际最大值可能更少。 没有用于确定最大入站消息大小的标准预配。 定义了以下特殊值。

含义
0
协议面向流,因此消息大小的概念不相关。
0x1
最大出站 (发送) 消息大小取决于基础网络 MTU (最大传输单元) ,因此直到绑定套接字后才能知道。 在套接字绑定到本地地址后,应用程序应使用 getsockopt 检索 SO_MAX_MSG_SIZE 的值。
0xFFFFFFFF
协议面向消息,但对可能传输的消息大小没有最大限制。

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

另请参阅

WSAEnumProtocols

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFOW

WSASend

WSASendTo

WSASocket

WSCInstallProvider

WSCInstallProvider64_32

WSCUpdateProvider

WSCUpdateProvider32

getsockopt

socket