SO_WSK_EVENT_CALLBACK

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

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

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

Чтобы включить или отключить функции обратного вызова событий в сокете, приложение WSK вызывает функцию WskControlSocket со следующими параметрами.

Параметр Значение

RequestType

WskSetOption

ControlCode

SO_WSK_EVENT_CALLBACK

Уровень

SOL_SOCKET

InputSize

sizeof(WSK_EVENT_CALLBACK_CONTROL)

InputBuffer

Указатель на структуру WSK_EVENT_CALLBACK_CONTROL

OutputSize

0

OutputBuffer

NULL

OutputSizeReturned

NULL

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

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

Когда приложение WSK вызывает WskControlSocket для отключения функции обратного вызова события, подсистема WSK ведет себя следующим образом:

  • Если отсутствуют выполняемые вызовы функции обратного вызова события, которая отключается, когда приложение WSK вызывает функцию WskControlSocket , функция обратного вызова события отключается, а функция WskControlSocket возвращает STATUS_SUCCESS. Если приложение WSK указывает IRP, IRP завершается с состоянием успешного выполнения.

  • Если выполняются вызовы функции обратного вызова события, которая отключается, когда приложение WSK вызывает функцию WskControlSocket и приложение WSK указало IRP, функция WskControlSocket возвращает STATUS_PENDING. Подсистема WSK отключает функцию обратного вызова события и завершает IRP после возврата всех выполняемых вызовов функции обратного вызова события.

  • Если выполняются вызовы функции обратного вызова события, которая отключается, когда приложение WSK вызывает функцию WskControlSocket , а приложение WSK не указало IRP, функция WskControlSocket возвращает STATUS_EVENT_PENDING. Подсистема WSK отключает функцию обратного вызова события после возврата всех входящих вызовов функции обратного вызова события.

При включении или отключении любой из стандартных функций обратного вызова событий WSK приложение WSK задает член NpiId структуры WSK_EVENT_CALLBACK_CONTROL указатель на идентификатор сетевого интерфейса WSK , NPI_WSK_INTERFACE_ID.

При включении или отключении функций обратного вызова для интерфейса расширения приложение WSK задает член NpiId структуры WSK_EVENT_CALLBACK_CONTROL указатель на идентификатор NPI для этого интерфейса расширения.

При включении функций обратного вызова событий приложение WSK может одновременно включить любое сочетание функций обратного вызова событий, допустимых для определенной категории сокета WSK. Приложение WSK одновременно включает эти сочетания, устанавливая для элемента EventMask структуры WSK_EVENT_CALLBACK_CONTROL побитовое значение ИЛИ флагов событий для всех включенных функций обратного вызова событий.

При отключении функций обратного вызова событий приложение WSK должно отключить каждую функцию обратного вызова событий независимо друг от друга. Приложение WSK независимо отключает функцию обратного вызова события, устанавливая для элемента EventMask структуры WSK_EVENT_CALLBACK_CONTROL побитовое ЗНАЧЕНИЕ ИЛИ флага события для функции обратного вызова события, которая отключена, и флага WSK_EVENT_DISABLE.

В следующей таблице показаны допустимые флаги событий для прослушивающего сокета.

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

WSK_EVENT_ACCEPT

WskAcceptEvent

В следующей таблице показаны допустимые флаги событий для сокета датаграммы.

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

WSK_EVENT_RECEIVE_FROM

WskReceiveFromEvent

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

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

WSK_EVENT_DISCONNECT

WskDisconnectEvent

WSK_EVENT_RECEIVE

WskReceiveEvent

WSK_EVENT_SEND_BACKLOG

WskSendBacklogEvent

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

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

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

Требования

Версия

Доступно в Windows Vista и более поздних версиях операционных систем Windows.

Заголовок

Wsk.h (включая Wsk.h)