Configuração e desinstalamento de conexão
A função WSAAccept permite que um aplicativo obtenha informações de chamador, como identificador de chamador e Qualidade de Serviço, antes de decidir se aceita uma solicitação de conexão de entrada. Isso é feito com um retorno de chamada para uma função de condição fornecida pelo aplicativo.
Os dados de usuário para usuário especificados por parâmetros na função WSAConnect e a função de condição do WSAAccept podem ser transferidos para o par durante o estabelecimento da conexão, desde que esse recurso tenha suporte do provedor de serviços.
Também é possível (para protocolos que dão suporte a isso) trocar dados do usuário entre os pontos de extremidade no momento do encerramento da conexão. O final que inicia o teardown pode chamar a função WSASendDisconnect para indicar que não serão enviados mais dados e para iniciar a sequência de desativação da conexão. Para determinados protocolos, parte do teardown é a entrega de dados de desconexão do iniciador de teardown. Depois de receber uma notificação de que o final remoto iniciou o teardown (normalmente pela indicação FD_CLOSE), a função WSARecvDisconnect pode ser chamada para receber os dados de desconexão, se houver.
Para ilustrar como os dados de desconexão podem ser usados, considere o cenário a seguir. A metade cliente de um aplicativo cliente/servidor é responsável por encerrar uma conexão de soquete. Coincidente com o encerramento, ele fornece (usando dados de desconexão) o número total de transações processadas com o servidor. O servidor, por sua vez, responde com o total cumulativo de transações processadas com todos os clientes. A sequência de chamadas e indicações pode ocorrer da seguinte maneira:
Lado do cliente | Lado do Servidor |
---|---|
(1) Invoque WSASendDisconnect para concluir a sessão e fornecer o total da transação. | |
(2) Obtenha FD_CLOSE, recv com um valor retornado de zero ou retorno de erro WSAEDISCON de WSARecv indicando o desligamento normal em andamento. | |
(3) Invoque WSARecvDisconnect para obter o total da transação do cliente. | |
(4) Computar o total geral cumulativo de todas as transações. | |
(5) Invoque WSASendDisconnect para transmitir o total geral. | |
(6) Receber FD_CLOSE indicação. | (5a) Invocar closesocket. |
(7) Invoque WSARecvDisconnect para receber e armazenar o total geral cumulativo de transações. | |
(8) Invocar closesocket |
Observe que a etapa (5a) deve seguir a etapa (5), mas não tem nenhuma relação de tempo com a etapa (6), (7) ou (8).