функция обратного вызова 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:
Возвращаемый код | Описание |
---|---|
|
Приложение WSK приняло диаграммы данных и извлекло все граммы данных из связанного списка WSK_DATAGRAM_INDICATION структуры. Подсистема WSK может вызывать функцию обратного вызова событий WskReceiveFromEvent при получении новых диаграмм данных в сокете. |
|
Приложение WSK принял диаграммы данных, но не извлекал все граммы данных из связанного списка WSK_DATAGRAM_INDICATION структуры. Приложение WSK сохраняет связанный список структур WSK_DATAGRAM_INDICATION до получения всех диаграмм данных. После получения всех диаграмм данных приложение WSK вызывает функцию WskRelease, чтобы освободить связанный список структур WSK_DATAGRAM_INDICATION обратно в подсистему WSK. Подсистема WSK может вызывать функцию обратного вызова событий WskReceiveFromEvent при получении новых диаграмм данных в сокете. |
|
Приложение WSK не принимало диаграммы данных. Если приложение WSK возвращает этот код состояния, подсистема WSK будет реагировать по-разному в зависимости от того, как приложение WSK включило функцию обратного вызова событий WskReceiveFromE vent.
|
Замечания
Подсистема 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 |