События ядра Winsock
Подсистема Winsock Kernel (WSK) может асинхронно уведомлять приложение WSK о возникновении определенных событий сокета, например при получении новых данных в сокете или при отключении сокета. Чтобы приложение WSK было асинхронно уведомлено о событиях сокета, оно должно реализовать соответствующие функции обратного вызова событий и включить их на сокетах, которые оно создаёт.
Примечание Для реализации или использования функций обратного вызова при событиях приложение WSK не требуется. Приложение WSK может выполнять большинство операций с сокетами WSK, вызывая соответствующие функции сокета WSK. Единственная функция WSK, требующая использования функций обратного вызова событий, — это режим условного принятия для прослушивающих сокетов. Дополнительные сведения о преимуществах и недостатках между использованием функций WSK и использовании функций обратного вызова событий см. в разделе Использование функций ядра Winsock и функции обратного вызова событий.
Каждая категория сокетов WSK поддерживает свой собственный набор событий сокетов.
Базовые сокеты
Базовые сокеты не поддерживают какие-либо события сокета.
Прослушивание сокетов
Событие | Функция обратного вызова событий |
---|---|
Принято входящее подключение. |
|
Входящий запрос на подключение поступил. |
|
Входящие запросы на подключение удалены. |
* Применяется только к прослушивающим сокетам с включенным режимом условного принятия. Дополнительную информацию об использовании условного режима приёма с сокетами прослушивания см. в разделе Прослушивание и принятие входящих подключений.
Дейтаграммные сокеты
Событие | Функция обратного вызова событий |
---|---|
Получено одно или несколько новых диаграмм данных. |
сокеты, ориентированные на подключение,
Событие | Функция обратного вызова событий |
---|---|
Получены новые данные. |
|
Сокет был отключен. |
|
Идеальный размер очереди на отправку изменился. |
Когда приложение WSK создает сокет, функции обратного вызова событий сокета отключены по умолчанию. Приложение WSK должно включить функции обратного вызова событий сокета, чтобы подсистема WSK вызывала функции обратного вызова событий сокета при возникновении событий сокета. Дополнительные сведения об активации и деактивации функций обратного вызова событий сокета см. в разделе Включение и отключение функций обратного вызова событий.
Если приложение WSK регистрирует интерфейс расширения для сокета, интерфейс расширения может поддерживать дополнительные события. Для получения дополнительной информации о регистрации интерфейса расширения для сокета см. раздел "Регистрация интерфейса расширения".
Подсистема WSK также может уведомлять приложение WSK о событиях, которые не относятся к конкретному сокету. Чтобы приложение WSK было уведомлено об этих событиях, приложение WSK должно реализовать функцию обратного вызова событий WskClientEvent. В настоящее время нет определенных событий, которые не зависят от конкретного сокета. Функция обратного вызова события WskClientEvent в приложении WSK всегда активирована и не может быть отключена.
Функции обратного вызова событий приложения WSK не должны ожидать завершения других запросов WSK в контексте выполнения WSK или функций обратного вызова событий. Обратный вызов может инициировать другие запросы WSK при условии, что он не проводит слишком много времени на уровне диспетчеризации или не исчерпает стек ядра, но он не должен ожидать их завершения, даже если обратный вызов вызывается на уровне IRQL = PASSIVE_LEVEL.