Функция WSACleanup (winsock.h)

Функция WSACleanup прекращает использование библиотеки DLL Winsock 2 (Ws2_32.dll).

Синтаксис

int WSACleanup();

Возвращаемое значение

Возвращаемое значение равно нулю, если операция прошла успешно. В противном случае возвращается значение SOCKET_ERROR, а конкретный номер ошибки можно получить, вызвав WSAGetLastError.

В многопоточной среде WSACleanup завершает операции сокетов Windows для всех потоков.

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этой функции должен произойти успешный вызов WSAStartup .
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEINPROGRESS
Выполняется блокирующий вызов 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 не отменяет регистрацию имен (например, одноранговых имен), которые могли быть зарегистрированы с поставщиком пространства имен Windows Sockets, например поставщиком пространства имен PNRP.
 
В Windows Sockets 1.1 попытка вызвать WSACleanup из блокирующего перехватчика и затем не удалось проверка код возврата была распространенной ошибкой программирования. Если приложению Winsock 1.1 необходимо завершить работу, пока блокирующий вызов не завершен, приложение должно сначала отменить вызов блокировки с помощью WSACancelBlockingCall , а затем выполнить вызов WSACleanup после возврата элемента управления в приложение. В Windows Sockets 2 эта проблема не существует, и функция WSACancelBlockingCall была удалена.

Функция 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

См. также раздел

API поставщика пространства имен PNRP

WSAStartup

Функции Winsock

Справочник по Winsock

closesocket

shutdown