Функция обратного вызова LPWSPCLEANUP (ws2spi.h)
Функция LPWSPCleanup прекращает использование поставщика службы сокетов Windows.
Синтаксис
LPWSPCLEANUP Lpwspcleanup;
int Lpwspcleanup(
[out] LPINT lpErrno
)
{...}
Параметры
[out] lpErrno
Указатель на код ошибки.
Возвращаемое значение
Возвращаемое значение равно нулю, если операция была успешно инициирована. В противном случае возвращается значение SOCKET_ERROR, а в lpErrno доступен определенный номер ошибки.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен произойти успешный вызов **WSPStartup** . | |
Произошел сбой сетевой подсистемы. | |
Идентификатор поставщика, предоставленный поставщику пространства имен, не управляется поставщиком пространства имен. |
Комментарии
Клиент WINDOWS Sockets 2 SPI необходим для успешного вызова WSPStartup , прежде чем он сможет использовать поставщиков служб Winsock. После завершения использования поставщиков служб Winsock клиент SPI вызывает LPWSPCleanup , чтобы отменить регистрацию у поставщика служб Winsock и позволить поставщику услуг освободить все ресурсы, выделенные от имени клиента Windows Sockets 2. Клиентам SPI разрешено выполнять несколько вызовов WSPStartup . Для каждого вызова WSPStartup также будет выдан соответствующий вызов LPWSPCleanup . Только окончательная очистка LPWSPCleanup для поставщика услуг выполняет фактическую очистку; предыдущие вызовы просто уменьшает количество внутренних ссылок в поставщике служб Winsock.
Когда количество внутренних ссылок достигает нуля и начинаются фактические операции очистки, все ожидающие блокирующие или асинхронные вызовы, выполняемые любым потоком в этом процессе, отменяются без отправки уведомлений и передачи сигналов объектам событий. Все ожидающие перекрывающиеся операции отправки и получения (LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFrom с перекрывающимся сокетом), выданные любым потоком в этом процессе, также отменяется без установки объекта события или вызова подпрограммы завершения, если указано. В этом случае ожидающие перекрывающиеся операции завершаются сбоем с состоянием ошибки WSA_OPERATION_ABORTED. Все сокеты, открытые при вызове LPWSPCleanup , сбрасываются и автоматически освобождается, как если бы был вызван LPWSPCloseSocket ; Сокеты, которые были закрыты с помощью LPWSPCloseSocket , но по-прежнему имеют ожидающие отправки данные, не затрагиваются, но ожидающие данные по-прежнему отправляются.
Эта функция не должна возвращать данные, пока не будет подготовлена библиотека DLL поставщика службы к выгрузке из памяти. В частности, все оставшиеся для передачи данные должны быть уже отправлены или помещены в очередь для передачи частями стека транспорта, которые не будут выгружены из памяти вместе с библиотекой DLL поставщика услуг.
Поставщик службы Winsock должен быть готов к обработке процесса, который завершается без вызова LPWSPCleanup (например, в результате ошибки). Поставщик службы Winsock должен убедиться, что LPWSPCleanup оставляет все в состоянии, в котором Ws2_32.dll может немедленно вызвать WSPStartup , чтобы восстановить использование Winsock.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | ws2spi.h |