使用多个协议

应用程序使用 WSAEnumProtocols 函数来确定存在哪些传输协议和协议链,并获取相关 WSAPROTOCOL_INFO 结构中包含的每个协议和协议链的相关信息。

在大多数情况下,每个协议或协议链都有一个 WSAPROTOCOL_INFO 结构。 但是,某些协议表现出多种行为。 例如,SPX 协议面向消息 (即,发送方的消息边界由网络) 保留,但接收套接字可以忽略这些消息边界并将其视为字节流。 因此,SPX 可能存在两个不同的 WSAPROTOCOL_INFO 结构条目-每个行为一个。

在 Windows 套接字 2 中,将显示几个新的地址系列、套接字类型和协议值。 Windows 套接字 1.1 支持 IPv4 的单个地址系列 (AF_INET) ,其中包含少量已知的套接字类型和协议标识符。 Windows 套接字 2 出于兼容性原因保留现有的地址系列、套接字类型和协议标识符,但它也支持具有新媒体类型的新传输协议的新地址系列值。

新的唯一标识符不一定是众所周知的,但这不会造成问题。 建议需要独立于协议的应用程序根据协议的适用性而不是分配给其 socket_type 或协议参数的值来选择 协议 。 协议适用性由协议WSAPROTOCOL_INFO结构中包含的通信属性(如消息与字节流和可靠 不可靠)指示。 根据适用性(而不是已知的协议名称和套接字类型)选择协议,允许独立于协议的应用程序在可用时利用新的传输协议及其关联的媒体类型。

客户端/服务器应用程序的服务器一半受益于在所有合适的传输协议上建立侦听套接字。 然后,客户端可以使用任何合适的协议建立其连接。 例如,无论客户端应用程序是在通过 LAN 连接的桌面系统上运行,还是在使用无线网络的笔记本电脑上运行,都会使客户端应用程序不受修改。