Функция WSACleanup (winsock2.h)
Функция WSACleanup прекращает использование библиотеки DLL Winsock 2 (Ws2_32.dll).
Синтаксис
int WSAAPI WSACleanup();
Возвращаемое значение
Возвращаемое значение равно нулю, если операция прошла успешно. В противном случае возвращается значение SOCKET_ERROR, а определенный номер ошибки можно получить, вызвав WSAGetLastError.
В многопоточной среде WSACleanup завершает операции сокетов Windows для всех потоков.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup . | |
Произошел сбой сетевой подсистемы. | |
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова. |
Комментарии
Для успешного выполнения вызова WSAStartup требуется приложение или библиотека DLL, прежде чем оно сможет использовать службы Сокетов 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 | winsock2.h (включая Winsock2.h) |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |