Макрос WSAAsyncGetHostByAddr (wsipv6ok.h)
Функция WSAsyncGetHostByAddr асинхронно извлекает сведения об узле, соответствующие адресу.
Синтаксис
void WSAAsyncGetHostByAddr(
[in] a,
[in] b,
[in] c,
[in] d,
[in] e,
[out] f,
[in] g
);
Параметры
[in] a
Дескриптор окна, которое получит сообщение по завершении асинхронного запроса.
[in] b
Сообщение, которое будет получено по завершении асинхронного запроса.
[in] c
Указатель на сетевой адрес узла. Адреса узлов хранятся в порядке байтов сети.
[in] d
Длина адреса в байтах.
[in] e
Тип адреса.
[out] f
Указатель на область данных для получения данных узла . Область данных должна быть больше размера структуры узла, так как эта область данных используется сокетами Windows для размещения структуры и всех данных, на которые ссылаются члены структуры узла . Рекомендуется использовать буфер в байтах MAXGETHOSTSTRUCT.
[in] g
Размер области данных для параметра buf в байтах.
Возвращаемое значение
None
Remarks
Функция WSAsyncGetHostByAddr является асинхронной версией gethostbyaddr. Он используется для получения имени узла и сведений об адресе, которые соответствуют сетевому адресу. Сокеты Windows инициируют операцию и немедленно возвращаются вызывающей стороне, передавая непрозрачный асинхронный дескриптор задачи, который приложение может использовать для идентификации операции. После завершения операции результаты (если таковые имеются) копируются в буфер, предоставленный вызывающим объектом, и сообщение отправляется в окно приложения.
После завершения асинхронной операции окно приложения, указанное параметром hWnd , получает сообщение в параметре wMsg . Параметр wParam содержит дескриптор асинхронной задачи, возвращаемый исходным вызовом функции. Высокая 16 бит lParam содержит любой код ошибки. Код ошибки может быть любой ошибкой, как определено в Winsock2.h. Нулевой код ошибки указывает на успешное завершение асинхронной операции.
При успешном завершении буфер, указанный для исходного вызова функции, содержит структуру узла . Для доступа к членам этой структуры исходный адрес буфера приводится к указателю структуры размещения и обращается соответствующим образом.
Если код ошибки — WSAENOBUFS, размер буфера, указанного buflen в исходном вызове, был слишком мал, чтобы содержать все результирующие сведения. В этом случае низкие 16 бит lParam содержат размер буфера, необходимый для предоставления всей необходимой информации. Если приложение решит, что частичные данные неадекватны, оно может повторно вывести вызов функции WSAsyncGetHostByAddr с буфером, достаточно большим для получения всей необходимой информации (то есть не меньше, чем низкие 16 бит lParam).
Буфер, указанный для этой функции, используется сокетами Windows для создания структуры вместе с содержимым областей данных, на которые ссылаются члены одной и той же структуры размещения . Чтобы избежать ошибки WSAENOBUFS , приложение должно предоставить буфер не менее байтов MAXGETHOSTSTRUCT (как определено в Winsock2.h).
Код ошибки и длина буфера должны быть извлечены из lParam с помощью макросов WSAGETASYNCERROR и WSAGETASYNCBUFLEN, определенных в Winsock2.h как:
#include <windows.h>
#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
Использование этих макросов обеспечит максимальную переносимость исходного кода для приложения.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | wsipv6ok.h (включая Winsock2.h, Winsock.h) |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |