Blocage des appels pour un SAN
Le commutateur Sockets Windows gère le blocage des appels et l’annulation de ces appels en interne ou les transfère au fournisseur de services TCP/IP. Le commutateur n’appelle jamais une fonction WSPCancelBlockingCall pour un fournisseur de services SAN afin d’annuler une demande de blocage en cours. Par conséquent, un fournisseur de services SAN n’est pas nécessaire pour implémenter une fonction WSPCancelBlockingCall .
Le commutateur gère les demandes de blocage suivantes et les annulations correspondantes des manières suivantes :
Lorsqu’une application demande de connecter un socket SAN à une adresse de destination spécifique en mode bloquant, le commutateur reçoit un appel WSPConnect bloquant. Le commutateur transfère la demande de connexion en mode non bloquant à la fonction WSPConnect du fournisseur de services SAN approprié. Si le commutateur doit annuler cette demande de connexion pour une raison quelconque, il appelle la fonction WSPCloseSocket du fournisseur de services SAN. Le fournisseur de services SAN doit rapidement abandonner la demande de connexion et libérer les ressources pour le socket.
Lorsque le commutateur reçoit une demande de blocage lancée par une application pour effectuer une opération de transfert de données sur un socket SAN, il transfère la demande de transfert de données de manière redondante (non bloquante) au fournisseur de services SAN approprié. Par exemple, si le commutateur reçoit un appel WSPSend synchrone (bloquant), il appelle la fonction WSPSend du fournisseur de services SAN approprié de manière redondante (non bloquante). Si l’application annule ultérieurement l’opération de transfert de données et que le commutateur contrôle la mémoire tampon de l’application, le commutateur termine la demande de l’application avec un échec status. Si la mémoire tampon de l’application est impliquée dans une opération RDMA en cours, le commutateur attend que l’opération se termine. Si un transfert RDMA prend trop de temps, le commutateur appelle la fonction WSPCloseSocket du fournisseur de services SAN approprié pour fermer la connexion de manière avortée, ce qui force l’achèvement.
Note Si une application annule un appel bloquant, elle ne peut pas compter sur la conservation d’une connexion. Seul l’appel WSPCloseSocket est garanti pour réussir sur le socket après l’annulation d’une demande bloquante. Pour plus d’informations, consultez la documentation SPI des sockets Windows dans le Microsoft Windows SDK.