Compartir a través de


Iniciar una conexión

Después de que el conmutador de Windows Sockets reciba una llamada WSPConnect iniciada por una aplicación, el modificador compara la dirección de destino de la solicitud de conexión con direcciones en la tabla de subredes IP del conmutador a las que sirven los proveedores de servicios SAN. Si una de esas subredes incluye esta dirección de destino, el modificador llama a las funciones WSPSocket y WSPBind del proveedor de servicios SAN correspondiente para crear y enlazar un socket, como se describe en Creación y enlace de sockets SAN. El modificador procesa la solicitud de conexión de la aplicación mediante el socket SAN. Si la dirección de destino de la solicitud de conexión no está en una subred SAN o si el proveedor de servicios SAN no puede crear y enlazar un socket, el conmutador usa el proveedor TCP/IP para establecer la conexión.

En la ilustración siguiente se muestra información general sobre cómo el conmutador de Windows Sockets solicita una conexión con un mismo nivel remoto. La secuencia y las secciones siguientes describen la solicitud de conexión con más detalle.

Diagrama que muestra el proceso del conmutador de Windows Sockets que solicita una conexión con un par remoto.

Después de crear y enlazar el socket SAN, el conmutador ejecuta una solicitud de conexión, mediante el socket SAN en modo de no bloqueo, como se describe en el procedimiento siguiente.

Para ejecutar una solicitud de conexión

  1. El modificador llama a la función WSPEventSelect del proveedor de servicios SAN. En esta llamada, el modificador pasa el código FD_CONNECT y el objeto de evento que se va a asociar a ese código. La llamada a WSPEventSelect solicita la notificación de eventos de conexión e informa al proveedor de servicios SAN de que cualquier llamada WSPConnect posterior se ejecuta en modo de no bloqueo.

  2. Una vez que se devuelve la función WSPEventSelect , el modificador llama a la función WSPConnect del proveedor de servicios SAN. En esta llamada, el modificador pasa la dirección de destino en el formato de una de las familias de direcciones de WSK. El controlador proxy del proveedor de servicios SAN asigna esta dirección de destino a una dirección nativa e intenta establecer la conexión.

  3. Si la función WSPConnect del proveedor de servicios SAN puede completarse o producir un error en la operación de conexión inmediatamente, devuelve el código correcto o de error adecuado. Si la función WSPConnect del proveedor de servicios SAN no puede completar inmediatamente una solicitud de conexión, la operación de conexión del proveedor de servicios SAN continúa de forma asincrónica en otro subproceso. La función WSPConnect del proveedor de servicios SAN devuelve con el error WSAEWOULDBLOCK para indicar que el socket está marcado como no desbloqueado y que la operación de conexión no se puede completar inmediatamente.

  4. Una vez completada la operación de conexión, el proveedor de servicios SAN llama a la función SetEvent de Win32 para indicar el objeto de evento que se registró anteriormente en la llamada WSPEventSelect .

  5. Una vez señalado el objeto de evento, el modificador llama a la función WSPEnumNetworkEvents del proveedor de servicios SAN para obtener el resultado de la operación de conexión.

Nota Una vez que el modificador establece una conexión a través de un proveedor de servicios SAN, el conmutador ya no puede usar el proveedor TCP/IP para esa conexión. Los proveedores de servicios SAN deben implementar completamente toda la funcionalidad necesaria para atender una conexión establecida.

Destrucción del socket SAN

Si se produce un error en la función WSPConnect del proveedor de servicios SAN, el modificador llama a la función WSPCloseSocket del proveedor de servicios SAN para destruir el socket SAN. A continuación, el modificador llama a la función WSPConnect del proveedor de servicios TCP/IP para reenviar la operación de conexión al proveedor de servicios TCP/IP a menos que el proveedor de servicios SAN devuelva uno de los siguientes códigos de error como resultado de su operación de conexión:

WSAECONNRESET
Indica que ninguna aplicación escucha en el puerto especificado en la dirección de destino.

WSAECONNREFUSED
Indica que la aplicación remota rechazó activamente la solicitud de conexión.

WSAEHOSTUNREACH
Indica que la dirección de destino no existe.

Estos códigos de error anteriores garantizan que también se producirá un error al intentar establecer la conexión a través de TCP/IP. Un proveedor de servicios SAN no debe devolver uno de estos códigos de error si no puede hacer esa garantía. Por ejemplo, si existe un equipo de destino que no admite Windows Sockets Direct en la SAN, pero solo puede comunicarse a través de NDIS, el proveedor de servicios SAN no puede devolver WSAEHOSTUNREACH como resultado de una solicitud de conexión SAN errónea a este destino porque una solicitud de conexión a través del proveedor TCP/IP puede tener éxito. En este caso, el proveedor de servicios SAN debe devolver WSAETIMEDOUT.

Negociación de sesión

Una vez que el modificador establece una conexión a través de un proveedor de servicios SAN, el modificador llama a la función de extensión WSPRegisterMemory del proveedor de servicios SAN para registrar previamente la memoria de la matriz de búferes que va a recibir mensajes entrantes. El modificador siguiente llama a la función WSPRecv del proveedor de servicios SAN para publicar uno o varios búferes para recibir datos de mensajes entrantes del mismo nivel remoto. A continuación, el modificador negocia una sesión con su emparejamiento remoto intercambiando un par de mensajes que contienen información de control de flujo inicial. Una vez que el modificador negocia una sesión, completa la llamada de WSPConnect que inició la aplicación. Después, la aplicación puede empezar a enviar y recibir datos en la conexión. Para obtener más información, consulte Aceptar solicitudes de conexión.

Una vez establecida una conexión a través de un socket SAN, el conmutador no llama a la función WSPConnect del proveedor de servicios SAN. El modificador controla internamente las aplicaciones que inician una llamada a la función WSPConnect del conmutador para sondear las solicitudes de conexión.