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


События ядра Winsock

Подсистема Winsock Kernel (WSK) может асинхронно уведомлять приложение WSK при возникновении определенных событий сокета, например при получении новых данных в сокете или отключении сокета. Чтобы приложение WSK асинхронно уведомлялось о событиях сокета, приложение WSK должно реализовать соответствующие функции обратного вызова событий и включить эти функции обратного вызова событий в создаваемых им сокетах.

Примечание Приложение WSK не требуется для реализации или использования функций обратного вызова событий. Приложение WSK может выполнять большинство операций сокета WSK, вызывая соответствующие функции сокета WSK. Единственной функцией WSK, требующей использования функций обратного вызова событий, является режим условного принятия для прослушивающих сокетов. Дополнительные сведения о преимуществах и недостатках между использованием функций WSK и функций обратного вызова событий см. в статье Использование функций ядра Winsock и функций обратного вызова событий.

Каждая категория сокета WSK поддерживает свой набор событий сокета.

Базовые сокеты

Базовые сокеты не поддерживают никаких событий сокетов.

Прослушивание сокетов

Событие Функция обратного вызова событий

Входящее подключение принято.

WskAcceptEvent

Поступил входящий запрос на подключение.

WskInspectEvent

Входящий запрос на подключение удален.

WskAbortEvent

* Применяется только к сокетам прослушивания, для которых включен режим условного принятия. Дополнительные сведения об использовании режима условного принятия с прослушивающими сокетами см. в разделах Прослушивание и Прием входящих подключений.

Сокеты датаграмм

Событие Функция обратного вызова событий

Получено одна или несколько новых датаграмм.

WskReceiveFromEvent

Сокеты, ориентированные на подключение

Событие Функция обратного вызова событий

Получены новые данные.

WskReceiveEvent

Сокет отключен.

WskDisconnectEvent

Изменился идеальный размер невыполненной работы по отправке.

WskSendBacklogEvent

Когда приложение WSK создает сокет, функции обратного вызова событий сокета по умолчанию отключены. Приложение WSK должно включить функции обратного вызова событий сокета, чтобы подсистема WSK могла вызывать функции обратного вызова событий сокета при возникновении событий сокета. Дополнительные сведения о включении и отключении функций обратного вызова событий сокета см. в разделе Включение и отключение функций обратного вызова событий.

Если приложение WSK регистрирует интерфейс расширения для сокета, интерфейс расширения может поддерживать дополнительные события. Дополнительные сведения о регистрации интерфейса расширения для сокета см. в разделе Регистрация интерфейса расширения.

Подсистема WSK также может уведомлять приложение WSK о событиях, не относящихся к конкретному сокету. Чтобы приложение WSK было уведомлено об этих событиях, приложение WSK должно реализовать функцию обратного вызова событий WskClientEvent . В настоящее время не определены события, не относящиеся к конкретному сокету. Функция обратного вызова событий WskClientEvent приложения WSK всегда включена и не может быть отключена.

Функции обратного вызова событий приложения WSK не должны ждать завершения других запросов WSK в контексте функций завершения WSK или обратного вызова событий. Обратный вызов может инициировать другие запросы WSK, предполагая, что он не тратит слишком много времени на DISPATCH_LEVEL или исчерпывает стек ядра, но не должен ждать их завершения, даже если обратный вызов вызывается в IRQL = PASSIVE_LEVEL.