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


Функция обратного вызова LPWSPENUMNETWORKEVENTS (ws2spi.h)

Функция LPWSPEnumNetworkEvents сообщает о вхождениях сетевых событий для указанного сокета.

Синтаксис

LPWSPENUMNETWORKEVENTS Lpwspenumnetworkevents;

int Lpwspenumnetworkevents(
  [in]  SOCKET s,
  [in]  WSAEVENT hEventObject,
  [out] LPWSANETWORKEVENTS lpNetworkEvents,
  [out] LPINT lpErrno
)
{...}

Параметры

[in] s

Дескриптор, определяющий сокет.

[in] hEventObject

Необязательный дескриптор, определяющий связанный объект события для сброса.

[out] lpNetworkEvents

Указатель на структуру WSANETWORKEVENTS , заполненную записью произошедших сетевых событий и связанными кодами ошибок. Структура WSANETWORKEVENTS определена в следующем тексте.

[out] lpErrno

Указатель на код ошибки.

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

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

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEINVAL
Указывает, что один из указанных параметров был недопустимым.
WSAEINPROGRESS
Выполняется блокирующий вызов Windows Sockets или поставщик услуг по-прежнему обрабатывает функцию обратного вызова.
WSAENOTSOCK
Дескриптор не является сокетом.

Комментарии

Эта функция используется для сообщения о том, какие сетевые события произошли для указанного сокета с момента последнего вызова этой функции. Он предназначен для использования в сочетании с LPWSPEventSelect и LPWSPAsyncSelect, которые связывают объект события с одним или несколькими сетевыми событиями. Запись сетевых событий начинается при вызове LPWSPEventSelect или LPWSPAsyncSelect с ненулевым аргументом lNetworkEvents и остается в силе до тех пор, пока не будет выполнен другой соответствующий вызов LPWSPEventSelect или LPWSPAsyncSelect с аргументом lNetworkEvents , равным нулю.

LPWSPEnumNetworkEvents сообщает только о сетевой активности и ошибках, назначенных через LPWSPEventSelect. Ознакомьтесь с описаниями LPWSPSelect и LPWSPAsyncSelect , чтобы узнать, как эти функции сообщают о сетевой активности и ошибках.

Внутренняя запись сетевых событий сокета копируется в структуру, на которую ссылается lpNetworkEvents, после чего запись внутренних сетевых событий очищается. Если hEventObject не равно NULL, указанный объект события также сбрасывается. Поставщик сокетов Windows гарантирует, что операции копирования записи сетевого события, ее очистки и сброса любого связанного объекта события являются атомарными, так что следующее вхождение назначенного сетевого события приведет к тому, что объект события будет установлен. В случае с этой функцией, возвращающей SOCKET_ERROR, связанный объект события не сбрасывается и запись сетевых событий не очищается.

Структура WSANETWORKEVENTS определяется на справочной странице WSANETWORKEVENTS .

Элемент lNetworkEvents структуры WSANETWORKEVENTS указывает, какое из FD_XXX сетевых событий произошло. Массив iErrorCode используется для хранения любых связанных кодов ошибок с индексом массива, соответствующим позиции битов событий в lNetworkEvents. Идентификаторы, такие как FD_READ_BIT и FD_WRITE_BIT, можно использовать для индексирования массива iErrorCode .

Обратите внимание, что заданы только те элементы массива iErrorCode , которые соответствуют битам, заданным в элементе lNetworkEvents . Другие элементы не изменяются (это важно для обратной совместимости с клиентами SPI сокета Windows 2, которые не знают о новых событиях FD_ROUTING_INTERFACE_CHANGE и FD_ADDRESS_LIST_CHANGE).

Вместе с соответствующим сетевым событием можно вернуть следующие коды ошибок.

Событие: FD_CONNECT

Код ошибки Значение
WSAEAFNOSUPPORT
Адреса из заданного семейства адресов не могут использоваться с этим сокетом.
WSAECONNREFUSED
Попытка подключения была решительно отклонена.
WSAENETUNREACH
В настоящее время сеть недоступна с этого узла.
WSAENOBUFS
Нет свободного места в буфере. Не удается подключить сокет.
WSAETIMEDOUT
Время ожидания попытки подключения истекло без установления соединения.

Событие: FD_CLOSE

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAECONNRESET
Подключение было сброшено удаленной стороной.
WSAECONNABORTED
Подключение было прервано из-за истечения времени ожидания или другого сбоя.

Событие: FD_READ, FD_WRITE, FD_OOB, FD_ACCEPT, FD_QOS, FD_GROUP_QOS, FD_ADDRESS_LIST_CHANGE

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.

Событие: FD_ROUTING_INTERFACE_CHANGE

Код ошибки Значение
WSAENETUNREACH
Указанное назначение больше недоступно.
WSAENETDOWN
Произошел сбой сетевой подсистемы.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть ws2spi.h

См. также раздел

LPWSPEventSelect