Concluindo solicitações de transferência de dados
A opção Windows Sockets transfere dados em um soquete SAN de forma assíncrona. Sempre que a opção chama a função de transferência de dados WSPSend, WSPRecv, WSPRdmaWrite ou WSPRdmaRead do provedor de serviços SAN, ela especifica um ponteiro para uma estrutura sobreposta (WSAOVERLAPPED) e NULL para uma rotina de conclusão. Mesmo que a opção chame a função WSPEventSelect do provedor de serviços SAN para indicar que o soquete está no modo sem bloqueio, o provedor de serviços SAN não é obrigado a implementar semântica semântica de desbloqueio para essas funções de transferência de dados.
Conforme descrito na documentação da API do Windows Sockets e spi na documentação do SDK do Microsoft Windows, os soquetes de bloqueio e não desbloqueio tratam as mesmas operações sobrepostas. Ou seja, o provedor de serviços SAN inicia a operação de transferência de dados específica e retorna imediatamente o controle para a opção. Essas funções de transferência de dados retornam código de erro WSA_IO_PENDING para indicar que uma operação assíncrona foi iniciada e que a conclusão dessa operação ocorre mais tarde. Após a conclusão da operação, o provedor de serviços SAN sinalizará a conclusão se a opção exigir notificação de conclusão, conforme descrito nos parágrafos a seguir.
Como a opção sempre especifica NULL para uma rotina de conclusão para operações de transferência de dados sobrepostas, um provedor de serviços san não é necessário para dar suporte à conclusão por meio do uso de APCs (chamadas de procedimento assíncrono).
Sempre que possível, a opção tenta chamar a função WSPGetOverlappedResult do provedor de serviços SAN para sondar a conclusão das solicitações de transferência de dados. Dessa forma, a opção pode evitar a sobrecarga associada a mecanismos de conclusão sobrepostos ativos. Para indicar a um provedor de serviços SAN que a opção não requer notificação de conclusão para uma operação de transferência de dados sobreposta específica, a opção define o bit de baixa ordem do membro hEvent na estrutura WSAOVERLAPPED como um. O provedor de serviços SAN não deve notificar a opção da conclusão das solicitações enviadas dessa maneira.
Se a opção exigir notificação da conclusão de uma operação de transferência de dados sobreposta, ela definirá o bit de baixa ordem do membro hEvent na estrutura WSAOVERLAPPED como zero. O provedor de serviços SAN deve concluir as operações de transferência de dados iniciadas dessa forma chamando a função WPUCompleteOverlappedRequest para sinalizar a conclusão. Nessa chamada, o provedor de serviços SAN passa um ponteiro para a estrutura WSAOVERLAPPED que corresponde a uma operação de transferência de dados concluída. Nesta chamada WPUCompleteOverlappedRequest , o provedor de serviços SAN também passa o descritor de soquete que foi adquirido da opção em uma chamada para a função WPUCreateSocketHandle . A opção recebe notificações de conclusão, as corresponde às solicitações de E/S de um aplicativo e conclui essas solicitações de E/S, conforme apropriado, para o aplicativo.