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


функция обратного вызова PFN_WSK_RECEIVE_FROM_EVENT (wsk.h)

Функция обратного вызова событий WskReceiveFromEvent уведомляет приложение WSK о получении одной или нескольких диаграмм данных в сокете данных.

Синтаксис

PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;

NTSTATUS PfnWskReceiveFromEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in, optional] PWSK_DATAGRAM_INDICATION DataIndication
)
{...}

Параметры

[in, optional] SocketContext

Указатель на контекст сокета для сокета диаграммы данных, который получил диаграммы данных. Приложение WSK предоставило этот указатель на подсистему WSK при вызове функции WskSocket для создания сокета диаграммы данных.

[in] Flags

Значение ULONG, содержащее побитовое или сочетание следующих флагов:

MSG_BCAST

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

MSG_MCAST

Диаграммы данных были получены с адресом транспорта назначения, который является адресом многоадресной рассылки.

WSK_FLAG_AT_DISPATCH_LEVEL

Подсистем а WSK называется функцией обратного вызова событий W WskReceiveFromEvent в IRQL = DISPATCH_LEVEL. Если этот флаг не задан, подсистема WSK может вызвать функцию обратно го вызова событий WSKReceiveFromEvent на любой <IRQL = DISPATCH_LEVEL.

[in, optional] DataIndication

Указатель на связанный список структур WSK_DATAGRAM_INDICATION, описывающих полученные диаграммы данных. Если этот параметр NULL, сокет больше не работает, а приложение WSK должно вызвать функцию WskCloseSocket, чтобы закрыть сокет как можно скорее.

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

Функция обратного вызова событий WSK приложения WSK WskReceiveFromEvent может возвращать один из следующих кодов NTSTATUS:

Возвращаемый код Описание
STATUS_SUCCESS
Приложение WSK приняло диаграммы данных и извлекло все граммы данных из связанного списка WSK_DATAGRAM_INDICATION структуры. Подсистема WSK может вызывать функцию обратного вызова событий WskReceiveFromEvent при получении новых диаграмм данных в сокете.
STATUS_PENDING
Приложение WSK принял диаграммы данных, но не извлекал все граммы данных из связанного списка WSK_DATAGRAM_INDICATION структуры. Приложение WSK сохраняет связанный список структур WSK_DATAGRAM_INDICATION до получения всех диаграмм данных. После получения всех диаграмм данных приложение WSK вызывает функцию WskRelease, чтобы освободить связанный список структур WSK_DATAGRAM_INDICATION обратно в подсистему WSK. Подсистема WSK может вызывать функцию обратного вызова событий WskReceiveFromEvent при получении новых диаграмм данных в сокете.
STATUS_DATA_NOT_ACCEPTED
Приложение WSK не принимало диаграммы данных. Если приложение WSK возвращает этот код состояния, подсистема WSK будет реагировать по-разному в зависимости от того, как приложение WSK включило функцию обратного вызова событий WskReceiveFromE vent.
  • Если приложение WSK включило функцию обратного вызова WskReceiveFromEvent с помощью параметра сокета SO_WSK_EVENT_CALLBACK, подсистема WSK будет иметь базовый буфер транспорта, если это возможно или если иное требуется протоколом. Подсистема WSK отключит функцию обратного вызова событий WskReceiveFromEvent и не вызовет функцию обратного вызова WskReceiveFromEvent до тех пор, пока приложение WSK повторно не включает эту функцию обратного вызова событий с параметром сокета SO_WSK_EVENT_CALLBACK. После повторного включения функции обратного вызова событий WSK WskReceiveFromEvent подсистема WSK возобновляет вызов функции обратного вызова событий WSK WskReceiveFromEvent с любыми оставшимися буферными диаграммами данных и при получении новых диаграмм данных в сокете.
  • Если приложение WSK включило функцию обратного вызова событий WskReceiveFromEvent с помощью функции обратного вызова событий WSK_SET_STATIC_EVENT_CALLBACKS операции управления клиентом подсистема WSK не отключает функцию обратно го вызова событий WskReceiveFromEvent. Подсистема WSK продолжит вызывать функцию обратного вызова WskReceiveFromEvent при получении новых диаграмм данных в сокете.

Замечания

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

Если функция обратного вызова событий WSK приложения WSK WskReceiveFromEvent включена в сокете диаграммы данных, а приложение также имеет ожидающий вызов функции WskReceiveFrom в том же сокете данных. Затем при поступлении диаграмм данных ожидающий вызов функции WskReceiveFrom будет иметь приоритет над функцией обратного вызова событий WskReceiveFromEvent . Подсистема WSK вызывает функцию обратного вызова событий приложения WskReceiveFromEvent только в том случае, если ожидающие вызовы WskReceiveFrom отсутствуют. Однако приложение WSK не должно предполагать, что подсистема WSK не вызовет WskReceiveFromEvent функцию обратного вызова событий для сокета диаграммы данных с ожидающим вызовом функции WskReceiveFrom. Условия гонки существуют, где подсистема WSK по-прежнему может вызывать приложения WskReceiveFromEvent функцию обратного вызова событий для сокета. Единственный способ для приложения WSK, чтобы убедиться, что подсистема WSK не будет вызывать приложения WskReceiveFromEvent функцию обратного вызова событий в сокете datagram, — отключить функцию обратного вызова событий wskReceiveFromEvent события в сокете.

Подсистема WSK вызывает функцию обратного вызова событий WSK в WskReceiveFromEvent функции обратного вызова событий в IRQL <= DISPATCH_LEVEL.

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях операционных систем Windows.
целевая платформа Виндоус
заголовка wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

См. также

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_DATAGRAM_INDICATION

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskRelease

WskSendTo

WskSocket