Bloqueo de llamadas para una SAN
El conmutador Windows Sockets controla las llamadas de bloqueo y la cancelación de dichas llamadas internamente o las reenvía al proveedor de servicios TCP/IP. El modificador nunca llama a una función WSPCancelBlockingCall para que un proveedor de servicios SAN cancele una solicitud de bloqueo que está en curso. Por lo tanto, no es necesario un proveedor de servicios SAN para implementar una función WSPCancelBlockingCall .
El modificador controla las siguientes solicitudes de bloqueo y las cancelaciones correspondientes de las siguientes maneras:
Cuando una aplicación solicita conectar un socket SAN a una dirección de destino específica en modo de bloqueo, el conmutador recibe una llamada WSPConnect de bloqueo. El modificador reenvía la solicitud de conexión en modo de no bloqueo a la función WSPConnect del proveedor de servicios SAN adecuada. Si el modificador debe cancelar esta solicitud de conexión por algún motivo, llama a la función WSPCloseSocket del proveedor de servicios SAN. El proveedor de servicios SAN debe anular rápidamente la solicitud de conexión y liberar los recursos del socket.
Cuando el modificador recibe una solicitud de bloqueo iniciada por una aplicación para realizar una operación de transferencia de datos en un socket SAN, reenvía la solicitud de transferencia de datos de forma superpuesta (sin bloqueo) al proveedor de servicios SAN adecuado. Por ejemplo, si el modificador recibe una llamada WSPSend sincrónica (bloqueo), llama a la función WSPSend del proveedor de servicios SAN adecuada de una manera superpuesta (sin bloqueo). Si la aplicación cancela posteriormente la operación de transferencia de datos y el modificador tiene control del búfer de la aplicación, el modificador completa la solicitud de la aplicación con un estado de error. Si el búfer de la aplicación está implicado en una operación RDMA pendiente, el modificador espera a que se complete la operación. Si una transferencia rdma tarda demasiado tiempo en completarse, el modificador llama a la función WSPCloseSocket del proveedor de servicios SAN adecuada para cerrar la conexión de forma anulativa, lo que fuerza la finalización.
Nota Si una aplicación cancela una llamada de bloqueo, no puede confiar en que se conserve una conexión. Solo se garantiza que la llamada WSPCloseSocket se realice correctamente en el socket después de la cancelación de una solicitud de bloqueo. Para obtener más información, consulte la documentación de SPI de Windows Sockets en el Microsoft Windows SDK.