Configuração de conexão e teardown
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.
Dados de usuário para usuário especificados por parâmetros na função WSAConnect e a função de condição de WSAAccept podem ser transferidos para o par durante o estabelecimento da conexão, desde que esse recurso seja compatível com o provedor de serviços.
Também é possível (para protocolos que dão suporte a isso) trocar dados de usuário entre os pontos de extremidade no tempo de interrupção 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 iniciar a sequência de teardown de conexão. Para determinados protocolos, parte do teardown é a entrega de dados de desconexão do iniciador de teardown. Depois de receber a notificação de que o extremidade remoto iniciou o teardown (normalmente pela indicação de 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 a terminação, ela 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 que processou 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 o total de transações de sessão e fornecimento. | |
(2) Obter FD_CLOSE, recv com um valor retornado igual a zero ou retorno de erro WSAEDISCON de WSARecv indicando o desligamento normal em andamento. | |
(3) Invoque WSARecvDisconnect para obter o total de transações do cliente. | |
(4) Total acumulado acumulado de todas as transações. | |
(5) Invoque WSASendDisconnect para transmitir um total geral. | |
(6) Receber FD_CLOSE indicação. | (5a) Invocar fechar. |
(7) Invoque WSARecvDisconnect para receber e armazenar o total acumulado de transações. | |
(8) Invocar fechar |
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).