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 函数。