Compartir a través de


Función WSAAsyncGetHostByAddr (winsock.h)

La función WSAAsyncGetHostByAddr recupera asincrónicamente la información del host que corresponde a una dirección.

Nota La función WSAAsyncGetHostByAddr no está diseñada para proporcionar una resolución paralela de varias direcciones. Por lo tanto, las aplicaciones que emiten varias solicitudes no deben esperar que se ejecuten simultáneamente. Como alternativa, las aplicaciones pueden iniciar otro subproceso y usar la función getnameinfo para resolver direcciones de forma independiente de la versión IP. Se insta a los desarrolladores que crean aplicaciones de Windows Sockets 2 a usar la función getnameinfo para permitir la transición sin problemas a la compatibilidad con IPv6.
 

Sintaxis

HANDLE WSAAsyncGetHostByAddr(
  HWND       hWnd,
  u_int      wMsg,
  const char *addr,
  int        len,
  int        type,
  char       *buf,
  int        buflen
);

Parámetros

hWnd

TBD

wMsg

TBD

addr

TBD

len

TBD

type

TBD

buf

TBD

buflen

TBD

Valor devuelto

El valor devuelto especifica si la operación asincrónica se inició correctamente. No implica éxito ni error de la propia operación.

Si no se produce ningún error, WSAAsyncGetHostByAddr devuelve un valor distinto de cero del tipo HANDLE que es el identificador de tarea asincrónico (que no se debe confundir con un HTASK de Windows) para la solicitud. Este valor se puede usar de dos maneras. Se puede usar para cancelar la operación mediante WSACancelAsyncRequest, o se puede usar para buscar coincidencias con las operaciones asincrónicas y los mensajes de finalización mediante el examen del parámetro de mensaje wParam .

Si no se pudo iniciar la operación asincrónica, WSAAsyncGetHostByAddr devuelve un valor cero y se puede recuperar un número de error específico llamando a WSAGetLastError.

Los siguientes códigos de error se pueden establecer cuando una ventana de la aplicación recibe un mensaje. Como se ha descrito anteriormente, se pueden extraer de lParam en el mensaje de respuesta mediante la macro WSAGETASYNCERROR .

Código de error Significado
WSAENETDOWN
Error en el subsistema de red.
WSAENOBUFS
No hay suficiente espacio en búfer disponible.
WSAEFAULT
El parámetro addr o buf no está en una parte válida del espacio de direcciones del proceso.
WSAHOST_NOT_FOUND
No se encontró el host de respuesta autoritativo.
WSATRY_AGAIN
No se encuentra el host no autenticado o SERVERFAIL.
WSANO_RECOVERY
Errores irrecuperables: FORMERR, REFUSED, NOTIMP.
WSANO_DATA
Nombre válido, sin registro de datos del tipo solicitado.
 
 

Los errores siguientes pueden producirse en el momento de la llamada a la función e indicar que no se pudo iniciar la operación asincrónica.

Código de error Significado
WSANOTINITIALISED Debe producirse una llamada de WSAStartup correcta antes de usar esta función.
WSAENETDOWN Error en el subsistema de red.
WSAEINPROGRESS Una llamada de Bloqueo de Windows Sockets 1.1 está en curso o el proveedor de servicios sigue procesando una función de devolución de llamada.
WSAEWOULDBLOCK La operación asincrónica no se puede programar en este momento debido a recursos u otras restricciones dentro de la implementación de Windows Sockets.

Comentarios

La función WSAAsyncGetHostByAddr es una versión asincrónica de gethostbyaddr. Se usa para recuperar el nombre de host y la información de dirección correspondiente a una dirección de red. Windows Sockets inicia la operación y vuelve al autor de la llamada inmediatamente, pasando un identificador de tarea asincrónico opaco que la aplicación puede usar para identificar la operación. Cuando se completa la operación, los resultados (si existen) se copian en el búfer proporcionado por el autor de la llamada y se envía un mensaje a la ventana de la aplicación.

Una vez completada la operación asincrónica, la ventana de la aplicación indicada por el parámetro hWnd recibe el mensaje en el parámetro wMsg . El parámetro wParam contiene el identificador de tarea asincrónico tal y como devuelve la llamada de función original. Los 16 bits altos de lParam contienen cualquier código de error. El código de error puede ser cualquier error tal como se define en Winsock2.h. Un código de error de cero indica que la operación asincrónica se completó correctamente.

Al finalizar correctamente, el búfer especificado en la llamada de función original contiene una estructura de host. Para acceder a los miembros de esta estructura, la dirección del búfer original se convierte en un puntero de estructura hostent y se obtiene acceso según corresponda.

Si el código de error es WSAENOBUFS, el tamaño del búfer especificado por buflen en la llamada original era demasiado pequeño para contener toda la información resultante. En este caso, los 16 bits bajos de lParam contienen el tamaño del búfer necesario para proporcionar toda la información necesaria. Si la aplicación decide que los datos parciales son inadecuados, puede volver a emitir la llamada de función WSAAsyncGetHostByAddr con un búfer lo suficientemente grande como para recibir toda la información deseada (es decir, no menor que los 16 bits bajos de lParam).

Windows Sockets usa el búfer especificado para esta función para construir una estructura junto con el contenido de las áreas de datos a las que hacen referencia los miembros de la misma estructura hostent . Para evitar el error WSAENOBUFS , la aplicación debe proporcionar un búfer de al menos BYTES MAXGETHOSTSTRUCT (como se define en Winsock2.h).

El código de error y la longitud del búfer deben extraerse de lParam mediante las macros WSAGETASYNCERROR y WSAGETASYNCBUFLEN, definidas en Winsock2.h como:

#include <windows.h>

#define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
#define WSAGETASYNCERROR(lParam)            HIWORD(lParam)

El uso de estas macros maximizará la portabilidad del código fuente de la aplicación.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winsock.h (incluya Winsock2.h, Winsock.h)
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

WSACancelAsyncRequest

Funciones winsock

Referencia de Winsock

getaddrinfo

gethostbyaddr

getnameinfo

hostent