Creación y enlace de sockets SAN
Si el conmutador Windows Sockets determina que puede enrutar los datos a través de una conexión SAN en lugar de a través de la pila TCP/IP, solicita al proveedor de servicios SAN adecuado crear, enlazar y establecer opciones para un socket en el que se pueden transferir los datos.
El socket creado por el proveedor de servicios SAN es un complemento del socket que creó el proveedor de servicios TCP/IP a petición de la aplicación, ya sea desde o hacia el que se transfieren los datos. El socket complementario creado por el proveedor de servicios SAN tiene las mismas opciones que el socket creado por el proveedor de servicios TCP/IP, si el proveedor de servicios SAN admite esas opciones.
El socket complementario también tiene la misma dirección IP y puerto TCP que el socket creado por el proveedor de servicios TCP/IP. Los datos de SAN se transfieren a través del socket complementario creado por el proveedor de servicios SAN en lugar del socket creado por el proveedor de servicios TCP/IP. El socket SAN no es visible para la aplicación. Desde la perspectiva de la aplicación, los datos se transfieren en el socket que solicitó crear para la transferencia de datos.
Nota El modificador siempre usa el proveedor de servicios TCP/IP para transferir datos a través de sockets sin procesar. Por lo tanto, el modificador nunca solicita un proveedor de servicios SAN para crear un socket sin formato.
En la ilustración siguiente se muestra información general sobre cómo el conmutador Windows Sockets crea un socket complementario. Secuencia de las secciones siguientes que describen la creación de un socket complementario con más detalle.
Iniciar la creación de un socket TCP/IP
Después de que el conmutador Windows Sockets reciba una llamada WSPSocket iniciada por una aplicación, el modificador llama a la función WSPSocket del proveedor TCP/IP para solicitar al proveedor TCP/IP que cree un socket.
El modificador Windows Sockets devuelve el descriptor del socket creado a la aplicación y almacena este descriptor en una estructura de datos privada asociada al socket.
Desde la perspectiva de la aplicación, el socket creado por el proveedor TCP/IP es el socket utilizado para las transferencias de datos, ya sea que el conmutador use el proveedor de servicios TCP/IP o el proveedor de servicios SAN para transferir los datos.
Enlace de un socket TCP/IP
El conmutador recibe una llamada WSPBind si una aplicación solicita enlazar el socket a un controlador de interfaz de red específico (NIC) o a la dirección IP con caracteres comodín (0.0.0.0). Un socket enlazado a la dirección IP con caracteres comodín puede escuchar las solicitudes de conexión entrantes de todas las NIC.
Nota A partir de Windows Vista, la dirección IP con caracteres comodín 0.0.0.0 no está disponible. A partir también de Windows Vista, si la clave del Registro IPAutoconfigurationEnabled se establece en un valor de 0, se deshabilita la asignación automática de direcciones IP y no se asigna ninguna dirección IP. En este caso, la herramienta de línea de comandos ipconfig no mostrará una dirección IP. Si la clave se establece en un valor distinto de cero, se asigna automáticamente una dirección IP. Esta clave se puede encontrar en las siguientes rutas de acceso del Registro:
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\IPAutoconfigurationEnabled
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interfaces\GUID\IPAutoconfigurationEnabled
El modificador reenvía esta llamada al proveedor de servicios TCP/IP mediante una llamada a la función WSPBind del proveedor TCP/IP.
Determinación del proveedor de servicios
El modificador determina si se debe usar un proveedor de servicios SAN para la transferencia de datos en un socket después de que la aplicación inicie una llamada WSPListen o WSPConnect al conmutador, como se describe en Configuración de una conexión SAN.
Si el modificador determina que no puede usar un proveedor de servicios SAN para una transferencia de datos, el conmutador enruta la transferencia de datos a través del proveedor de servicios TCP/IP.
Si el modificador elige un proveedor de servicios SAN para atender el socket de una aplicación, el conmutador llama a la función WSPSocket del proveedor de servicios SAN para crear un socket complementario.
Iniciar la creación de un socket complementario
La función WSPSocket del proveedor de servicios SAN inicializa una estructura de datos interna en la que almacena información sobre el socket complementario.
La función WSPSocket del proveedor de servicios SAN debe llamar a la función WPUCreateSocketHandle para adquirir un descriptor de socket del conmutador.
El proveedor de servicios SAN debe almacenar el descriptor de socket del conmutador en su estructura de datos interna para el socket complementario y debe devolver su propio descriptor para que el socket complementario complete la llamada WSPSocket . El descriptor de socket devuelto por el proveedor de servicios SAN puede ser cualquier valor significativo, como un puntero a una estructura de datos privada.
Para realizar una operación en el socket, el conmutador proporciona el descriptor de socket devuelto por el proveedor de servicios SAN a la función adecuada del proveedor de servicios SAN. Del mismo modo, el proveedor de servicios SAN debe proporcionar el descriptor de socket que se adquirió del modificador en la llamada WPUCreateSocketHandle si el proveedor de servicios SAN realiza alguna de las siguientes llamadas:
WPUQuerySocketHandleContext
WPUCloseSocketHandle
WPUCompleteOverlappedRequest
Enlazar un socket complementario
Si la función WSPSocket de un proveedor de servicios SAN se completa correctamente, el conmutador llama inmediatamente a la función WSPBind del proveedor de servicios SAN para asignar una dirección IP local y un puerto TCP al socket.
El modificador asigna la misma dirección IP y puerto TCP al socket SAN que se asignó al socket creado por el proveedor TCP/IP. El proveedor de servicios SAN debe traducir esta dirección TCP/IP a su formato nativo.
El modificador proporciona una dirección IP completa y un puerto TCP (es decir, valores distintos de cero) a la función WSPBind del proveedor de servicios SAN, a menos que una aplicación solicitara escuchar las conexiones entrantes de todas las NIC. En el caso posterior, el modificador proporciona la dirección IP comodín a la función WSPBind del proveedor de servicios SAN.
Opciones de configuración de un socket complementario
- Si la aplicación especificó alguna opción de socket, el modificador almacena esas opciones. Después de crear el socket SAN, el conmutador llama a la función WSPSetSockOpt del proveedor de servicios SAN para cada opción admitida especificada por la aplicación para establecer inmediatamente estas opciones para el socket SAN.
Error de una llamada de socket complementario
- Si un proveedor de servicios SAN produce un error en cualquiera de las llamadas anteriores a sus funciones WSPSocket, WSPBind o WSPSetSockOpt , el modificador llama a la función WSPCloseSocket del proveedor de servicios SAN para destruir el socket SAN. A continuación, el conmutador usa el proveedor TCP/IP para continuar con el mantenimiento del socket de aplicación. Tenga en cuenta que, una vez que el modificador establece una conexión mediante un proveedor de servicios SAN, el modificador no puede usar el proveedor TCP/IP para atender el socket de la aplicación. En este caso, el modificador devuelve el error adecuado a la aplicación.
Conexión del socket complementario
- Después de configurar el socket complementario, el conmutador llama a la función WSPListen o WSPConnect para que el proveedor de servicios SAN realice la operación que provocó que el proveedor de servicios SAN configurara originalmente el socket. Por ejemplo, si una aplicación solicitó originalmente escuchar las conexiones entrantes, el modificador llama a la función WSPListen del proveedor de servicios SAN.