функция обратного вызова 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 называется функцией обратного вызова события WskReceiveFromEvent по адресу IRQL = DISPATCH_LEVEL. Если этот флаг не задан, подсистема WSK могла вызвать функцию обратного вызова события WskReceiveFromEvent в любом irQL <= DISPATCH_LEVEL.
[in, optional] DataIndication
Указатель на связанный список WSK_DATAGRAM_INDICATION структур, описывающих полученные датаграммы. Если этот параметр имеет значение NULL, сокет больше не работает, и приложение WSK должно вызвать функцию WskCloseSocket , чтобы закрыть сокет как можно скорее.
Возвращаемое значение
Функция обратного вызова события WskReceiveFromEvent приложения WSK может возвращать один из следующих кодов 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 включило функцию обратного вызова события WskReceiveFromEvent .
|
Комментарии
Подсистема WSK вызывает функцию обратного вызова событий WskReceiveFromEvent приложения WSK, когда новые датаграммы принимаются в сокет datagram, только если функция обратного вызова события была ранее включена с параметром сокета SO_WSK_EVENT_CALLBACK . Дополнительные сведения о включении функций обратного вызова событий сокета см. в разделе Включение и отключение функций обратного вызова событий.
Если функция обратного вызова события WskReceiveFromEvent приложения WSK включена в сокете datagram и приложение также имеет ожидающий вызов функции WskReceiveFrom в том же сокете datagram, то при поступлении датаграмм ожидающий вызов функции WskReceiveFrom будет иметь приоритет над функцией обратного вызова события WskReceiveFromEvent . Подсистема WSK вызывает функцию обратного вызова события WskReceiveFromEvent приложения только в том случае, если из ожидающих вызовов функции WskReceiveFrom не было помещено в очередь. Однако приложение WSK не должно предполагать, что подсистема WSK не будет вызывать функцию обратного вызова события WskReceiveFromEvent приложения для сокета датаграммы, который имеет ожидающий вызов функции WskReceiveFrom . Существуют условия гонки, в которых подсистема WSK может по-прежнему вызывать функцию обратного вызова события WskReceiveFromEvent приложения WSK для сокета. Единственный способ для приложения WSK убедиться, что подсистема WSK не будет вызывать функцию обратного вызова событий WskReceiveFromEvent приложения в сокете datagram, — отключить функцию обратного вызова события WskReceiveFromEvent приложения в сокете.
Подсистема WSK вызывает функцию обратного вызова события WskReceiveFromEvent приложения WSK по адресу IRQL <= DISPATCH_LEVEL.
Функция обратного вызова событий WskReceiveFromEvent приложения WSK не должна ждать завершения других запросов WSK в контексте функций завершения WSK или обратного вызова событий. Обратный вызов может инициировать другие запросы WSK (при условии, что он не тратит слишком много времени на DISPATCH_LEVEL), но не должен ждать их завершения, даже если обратный вызов вызывается по irQL = PASSIVE_LEVEL.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows Vista и более поздних версиях операционных систем Windows. |
Целевая платформа | Windows |
Header | wsk.h (включая Wsk.h) |
IRQL | <= DISPATCH_LEVEL |