Функция WSACleanup (winsock.h)
Функция WSACleanup прекращает использование библиотеки DLL Winsock 2 (Ws2_32.dll).
Синтаксис
int WSACleanup();
Возвращаемое значение
Возвращаемое значение равно нулю, если операция прошла успешно. В противном случае возвращается значение SOCKET_ERROR, а конкретный номер ошибки можно получить, вызвав WSAGetLastError.
В многопоточной среде WSACleanup завершает операции сокетов Windows для всех потоков.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен произойти успешный вызов WSAStartup . | |
Произошел сбой сетевой подсистемы. | |
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова. |
Комментарии
Приложение или библиотека DLL необходимы для успешного вызова WSAStartup , прежде чем использовать службы сокетов Windows. После завершения использования сокетов Windows приложение или библиотека DLL должны вызвать WSACleanup , чтобы отменить регистрацию из реализации сокетов Windows и позволить реализации освободить все ресурсы, выделенные от имени приложения или библиотеки DLL.
При вызове WSACleanup все ожидающие блокирующие или асинхронные вызовы сокетов Windows, выданные любым потоком в этом процессе, отменяются без отправки уведомлений или без передачи сигналов о каких-либо объектах событий. Любые ожидающие перекрывающиеся операции отправки или получения (например, WSASend, WSASendTo, WSARecv или WSARecvFrom с перекрывающимся сокетом), выданные любым потоком в этом процессе, также отменяется без настройки объекта события или вызова подпрограммы завершения, если она была указана. В этом случае ожидающие перекрывающиеся операции завершаются сбоем с состоянием ошибки WSA_OPERATION_ABORTED.
Сокеты, открытые при вызове WSACleanup , сбрасываются и автоматически освобождается, как если бы был вызван closesocket . Сокеты, которые были закрыты с помощью closesocket , но по-прежнему имеют ожидающие отправки данные, могут быть затронуты при вызове WSACleanup . В этом случае ожидающие данные могут быть потеряны, если WS2_32.DLL выгружается из памяти при выходе приложения. Чтобы обеспечить отправку всех ожидающих данных, приложение должно использовать завершение работы , чтобы закрыть подключение, а затем дождаться завершения закрытия перед вызовом closesocket и WSACleanup. Все ресурсы и внутреннее состояние, такие как незапущенные или опубликованные сообщения в очереди, должны быть освобождены, чтобы быть доступными для следующего пользователя.
Для каждого успешного вызова WSAStartup должен быть вызов WSACleanup. Только последний вызов функции WSACleanup выполняет фактическую очистку. Предыдущие вызовы просто уменьшает количество внутренних ссылок в WS2_32.DLL.
Функция WSACleanup обычно приводит к выгрузке вспомогательных библиотек DLL для конкретного протокола. В результате функция WSACleanup не должна вызываться из функции DllMain в библиотеке DLL приложения. Это может привести к взаимоблокировкам. Дополнительные сведения см. в разделе Функция DLL Main.
Windows Phone 8. Эта функция поддерживается для приложений Магазина Windows Phone на Windows Phone 8 и более поздних версиях.
Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows на Windows 8.1, Windows Server 2012 R2 и более поздних версиях.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1, Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winsock.h (включая Winsock2.h) |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |