Compartilhar via


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).