WSAPROTOCOL_INFOW结构(winsock2.h)
WSAPROTOCOL_INFOW 结构用于存储或检索给定协议的完整信息。 协议名称表示为 Unicode 字符数组。
语法
typedef struct _WSAPROTOCOL_INFOW {
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;
WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
成员
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 应用程序不应该看到具有此位集的条目。 |
|
指示 套接字 或 WSASocket 的 协议 参数中的零值与此协议项匹配。 |
|
由提供程序设置,指示对网络直接访问的支持。
Windows 7 和 Windows Server 2008 R2 支持此值。 |
ProviderId
类型:GUID
由服务提供商供应商分配给提供程序的全局唯一标识符(GUID)。 此值对于多个服务提供商能够实现特定协议的实例非常有用。 应用程序可以使用 ProviderId 成员来区分可能不区分的提供程序。
dwCatalogEntryId
类型:DWORD
由每个 WSAPROTOCOL_INFO 结构的WS2_32.DLL分配的唯一标识符。
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 及更早版本的平台 SDK 上,地址系列的可能值在 Winsock2.h 头文件中定义。
当前支持的值是AF_INET或AF_INET6,它们是 IPv4 和 IPv6 的 Internet 地址系列格式。 如果安装了地址系列的 Windows 套接字服务提供商,则支持用于 NetBIOS 的其他地址系列选项(例如AF_NETBIOS)。 请注意,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 套接字提供程序时,才支持此地址系列。
适用于 NetBIOS 的 Windows 套接字提供程序在 32 位版本的 Windows 上受支持。 此提供程序默认安装在 32 位版本的 Windows 上。 适用于 NetBIOS 的 Windows 套接字提供程序在 64 位版本的 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)地址系列。
仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。 |
|
蓝牙地址系列。
如果安装了蓝牙适配器和驱动程序,则 Windows XP 支持此地址系列(SP2 或更高版本)。 |
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
向 套接字 和 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]
类型:WCHAR[WSAPROTOCOL_LEN+1]
Unicode 字符数组,其中包含标识协议的可读名称,例如“MSAFD Tcpip [UDP/IP]”。 允许的最大字符数是WSAPROTOCOL_LEN,定义为 255。
言论
注意
winsock2.h 标头将WSAPROTOCOL_INFO定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | winsock2.h |