Compartir a través de


Cerrar un socket SAN

Después de que el conmutador Windows Sockets en cualquier lado de una conexión llama a la función WSPCloseSocket de un proveedor de servicios SAN, el proveedor de servicios SAN realiza el procedimiento siguiente para cerrar un socket SAN:

  1. Cada proveedor de servicios SAN en cualquiera de los lados de la conexión elimina la conexión y completa las solicitudes de recepción: llamadas de función WSPRecv ; para ello, devuelve el código de error adecuado en el parámetro lpErrno . Por ejemplo, un proveedor de servicios SAN devuelve WSAECONNRESET para indicar que el sistema remoto restablece la conexión.

    Cada proveedor de servicios SAN también señala la finalización de operaciones superpuestas pendientes para que se cierre el socket SAN. El proveedor de servicios SAN llama a la función WPUCompleteOverlappedRequest para indicar la finalización de una operación superpuesta. En esta llamada, el proveedor de servicios SAN pasa un puntero a la estructura WSAOVERLAPPED asociada a la operación superpuesta. El proveedor de servicios SAN también pasa el código de error WSA_OPERATION_ABORTED para especificar que se canceló la operación superpuesta porque se cerró el socket SAN. Antes de señalar la finalización de una operación superpuesta, el proveedor de servicios SAN debe liberar cualquier memoria necesaria para la operación.

  2. Después de que el proveedor de servicios SAN haya terminado de realizar llamadas a funciones con el prefijo WPU- al conmutador mediante el identificador al socket SAN que se obtuvo a través de una llamada up-call de WPUCreateSocketHandle , el proveedor de servicios SAN debe realizar una llamada final al conmutador llamando a la función WPUCloseSocketHandle para cerrar el identificador de socket. A continuación, el proveedor de servicios SAN limpia todo lo relacionado con el socket SAN. Las llamadas ascendentes son llamadas de función de la tabla de distribución de llamadas ascendentes del conmutador. El modificador proporciona un puntero a esta tabla de distribución de llamadas ascendentes cuando llama a la función WSPStartupEx del proveedor de servicios SAN para empezar a usar el proveedor.

Siempre que un proveedor de servicios SAN realice el procedimiento anterior para cerrar un socket SAN, el conmutador se encarga de todo lo demás.

Para evitar condiciones de carrera entre un proveedor de servicios SAN y el conmutador iniciando cierres de socket, el proveedor de servicios SAN nunca debe liberar estructuras de datos relacionadas con un socket SAN hasta que el conmutador llame a WSPCloseSocket.