Поделиться через


Функция обратного вызова LPWSPCLEANUP (ws2spi.h)

Функция LPWSPCleanup прекращает использование поставщика службы сокетов Windows.

Синтаксис

LPWSPCLEANUP Lpwspcleanup;

int Lpwspcleanup(
  [out] LPINT lpErrno
)
{...}

Параметры

[out] lpErrno

Указатель на код ошибки.

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

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

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этой функции должен произойти успешный вызов **WSPStartup** .
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEINVAL
Идентификатор поставщика, предоставленный поставщику пространства имен, не управляется поставщиком пространства имен.

Комментарии

Клиент 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

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

LPWSPCloseSocket

LPWSPShutdown

Запуск WSP