Função WSACleanup (winsock2.h)
A função WSACleanup encerra o uso da DLL winsock 2 (Ws2_32.dll).
Sintaxe
int WSAAPI 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 multithreaded, 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 de bloqueio do Windows Sockets 1.1 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 do Windows Sockets, 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 nenhuma mensagem 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 uma tiver sido especificada. Nesse caso, as operações sobrepostas pendentes falham com o erro status WSA_OPERATION_ABORTED.
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 na fila ou postadas, 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 ao descarregamento de DLLs auxiliares específicas do protocolo. Como resultado, a função WSACleanup não deve ser chamada da função DllMain em uma DLL de 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 | winsock2.h (inclua Winsock2.h) |
Biblioteca | Ws2_32.lib |
DLL | Ws2_32.dll |