Compartilhar via


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
WSANOTINITIALISED
Uma chamada WSAStartup bem-sucedida deve ocorrer antes de usar essa função.
WSAENETDOWN
O subsistema de rede falhou.
WSAEINPROGRESS
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.

Observação OWSACleanup não cancela o registro de nomes (nomes de pares, por exemplo) que podem ter sido registrados com um provedor de namespace do Windows Sockets, como o provedor de namespace PNRP (Protocolo de Resolução de Nomes pares).
 
No Windows Sockets 1.1, tentar chamar o WSACleanup de dentro de um gancho de bloqueio e, em seguida, não marcar o código de retorno foi um erro de programação comum. Se um aplicativo Winsock 1.1 precisar ser encerrado enquanto uma chamada de bloqueio estiver pendente, o aplicativo precisará primeiro cancelar a chamada de bloqueio com WSACancelBlockingCall e, em seguida, emitir a chamada WSACleanup depois que o controle for retornado ao aplicativo. No Windows Sockets 2, esse problema não existe e a função WSACancelBlockingCall foi removida.

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

Confira também

API do provedor de namespace PNRP

Wsastartup

Funções Winsock

Referência de Winsock

Closesocket

shutdown