Mecanismo de extensión de Provider-Specific
La función WSAIoctl permite a los proveedores de servicios ofrecer extensiones de características específicas del proveedor. Este mecanismo supone, por supuesto, que una aplicación es consciente de una extensión determinada y entiende tanto la semántica como la sintaxis implicada. Normalmente, este tipo de información la proporcionaría el proveedor de servicios.
Para invocar una función de extensión, la aplicación primero debe solicitar un puntero a la función deseada. Esto se realiza a través de la función WSAIoctl mediante el código de comando SIO_GET_EXTENSION_FUNCTION_POINTER. El búfer de entrada de WSAIoctl contiene un identificador para la función de extensión deseada mientras que el búfer de salida contiene el puntero de función en sí. Después, la aplicación puede invocar la función de extensión directamente sin pasar por el Ws2_32.dll.
Los identificadores asignados a las funciones de extensión son identificadores únicos globales (GUID) asignados por proveedores de servicios. Se insta a los proveedores que crean funciones de extensión a publicar detalles completos sobre la función, incluida la sintaxis del prototipo de función. Esto hace posible que más de un proveedor de servicios ofrezca funciones de extensión comunes y populares. Una aplicación puede obtener el puntero de función y usar la función sin necesidad de conocer nada sobre el proveedor de servicios concreto que implementa la función.
En Windows Vista y versiones posteriores, las nuevas extensiones del sistema Winsock se exportan directamente desde el ARCHIVO DLL de Winsock, por lo que la función WSAIoctl no es necesaria para cargar estas extensiones. Las nuevas funciones de extensión disponibles en Windows Vista y versiones posteriores incluyen las funciones WSAPoll y WSASendMsg que se exportan desde Ws2_32.dll.