Função WSACleanup (winsock.h)
A função WSACleanup encerra o uso da DLL winsock 2 (Ws2_32.dll).
Sintaxe
int WSACleanup();
Retornar valor
O valor retornado será zero se a operação tiver sido bem-sucedida. Caso contrário, o valor SOCKET_ERROR será retornado e um número de erro específico poderá ser recuperado chamando WSAGetLastError.
Em um ambiente multithread, o WSACleanup encerra as operações do Windows Sockets para todos os threads.
Código do erro | Significado |
---|---|
Uma chamada WSAStartup bem-sucedida deve ocorrer antes de usar essa função. | |
O subsistema de rede falhou. | |
Uma chamada do Windows Sockets 1.1 de bloqueio está em andamento ou o provedor de serviços ainda está processando uma função de retorno de chamada. |
Comentários
Um aplicativo ou DLL é necessário para executar uma chamada WSAStartup bem-sucedida antes de poder usar os serviços do Windows Sockets. Quando tiver concluído o uso de Soquetes do Windows, o aplicativo ou a DLL deverão chamar o WSACleanup para se desregistrar de uma implementação do Windows Sockets e permitir que a implementação libere todos os recursos alocados em nome do aplicativo ou da DLL.
Quando WSACleanup é chamado, qualquer bloqueio pendente ou chamadas assíncronas do Windows Sockets emitidas por qualquer thread nesse processo são canceladas sem postar mensagens de notificação ou sem sinalizar nenhum objeto de evento. Todas as operações de envio ou recebimento sobrepostas pendentes (WSASend, WSASendTo, WSARecv ou WSARecvFrom com um soquete sobreposto, por exemplo) emitidas por qualquer thread nesse processo também são canceladas sem definir o objeto de evento ou invocar a rotina de conclusão, se for especificado. Nesse caso, as operações sobrepostas pendentes falham com o erro status WSA_OPERATION_ABORTED.
Os soquetes abertos quando o WSACleanup foi chamado são redefinidos e desalocados automaticamente como se closesocket fosse chamado. Soquetes que foram fechados com closesocket , mas que ainda têm dados pendentes a serem enviados, podem ser afetados quando WSACleanup é chamado. Nesse caso, os dados pendentes poderão ser perdidos se o WS2_32.DLL for descarregado da memória à medida que o aplicativo for encerrado. Para garantir que todos os dados pendentes sejam enviados, um aplicativo deve usar o desligamento para fechar a conexão e aguardar até que o fechamento seja concluído antes de chamar closesocket e WSACleanup. Todos os recursos e o estado interno, como mensagens não postadas ou não postadas na fila, devem ser desalocados para que estejam disponíveis para o próximo usuário.
Deve haver uma chamada para WSACleanup para cada chamada bem-sucedida para WSAStartup. Somente a chamada final da função WSACleanup executa a limpeza real. As chamadas anteriores simplesmente decrementam uma contagem de referência interna no WS2_32.DLL.
A função WSACleanup normalmente leva a DLLs auxiliares específicas do protocolo sendo descarregadas. Como resultado, a função WSACleanup não deve ser chamada da função DllMain em uma DLL do aplicativo. Isso pode causar deadlocks. Para obter mais informações, consulte a Função Principal da DLL.
Windows Phone 8: essa função tem suporte para aplicativos da Windows Phone Store no Windows Phone 8 e posterior.
Windows 8.1 e Windows Server 2012 R2: essa função tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posteriores.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8.1, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | winsock.h (inclua Winsock2.h) |
Biblioteca | Ws2_32.lib |
DLL | Ws2_32.dll |