Provider-Specific扩展机制

WSAIoctl 函数允许服务提供商提供特定于提供程序的功能扩展。 当然,此机制假定应用程序了解特定的扩展,并了解所涉及的语义和语法。 此类信息通常由服务提供商供应商提供。

若要调用扩展函数,应用程序必须首先请求指向所需函数的指针。 这是通过使用 SIO_GET_EXTENSION_FUNCTION_POINTER 命令代码通过 WSAIoctl 函数完成的。 WSAIoctl 的输入缓冲区包含所需扩展函数的标识符,而输出缓冲区包含函数指针本身。 然后,应用程序可以直接调用扩展函数,而无需传递Ws2_32.dll。

分配给扩展函数的标识符 (GUID) 由服务提供商供应商分配的全局唯一标识符。 敦促创建扩展函数的供应商发布有关函数的完整详细信息,包括函数原型的语法。 这使多个服务提供商供应商能够提供通用和常用的扩展函数。 应用程序可以获取函数指针并使用函数,而无需知道实现函数的特定服务提供商的任何信息。

在 Windows Vista 及更高版本上,新的 Winsock 系统扩展直接从 Winsock DLL 导出,因此不需要 WSAIoctl 函数来加载这些扩展。 Windows Vista 上提供的新扩展函数,更高版本包括从 Ws2_32.dll导出的 WSAPollWSASendMsg 函数。