Compartir a través de


Resumen de las funciones de resolución de nombres

Las funciones de resolución de nombres se pueden agrupar en tres categorías: Instalación del servicio, consultas de cliente y asistente (con macros). Las secciones siguientes identifican las funciones de cada categoría y describen brevemente su uso previsto. También se describen las estructuras de datos clave.

Instalación del servicio

Cuando la clase de servicio necesaria aún no existe, una aplicación usa WSAInstallServiceClass para instalar una nueva clase de servicio proporcionando un nombre de clase de servicio, un GUID para el identificador de clase de servicio y una serie de estructuras WSANSCLASSINFO . Estas estructuras son específicas de un espacio de nombres determinado y proporcionan valores comunes, como los números de puerto TCP recomendados o los identificadores de SAP de NetWare. Se puede quitar una clase de servicio llamando a WSARemoveServiceClass y proporcionando el GUID correspondiente al identificador de clase.

Una vez que existe una clase de servicio, se pueden instalar o quitar instancias específicas de un servicio a través de WSASetService. Esta función toma una estructura WSAQUERYSET como parámetro de entrada junto con un código de operación y marcas de operación. El código de operación indica si el servicio se está instalando o quitando. La estructura WSAQUERYSET proporciona toda la información relevante sobre el servicio, incluido el identificador de clase de servicio, el nombre del servicio (para esta instancia), el identificador del espacio de nombres y la información del protocolo aplicables, y un conjunto de direcciones de transporte en las que escucha el servicio. Los servicios deben invocar WSASetService cuando se inicialicen para anunciar su presencia en espacios de nombres dinámicos.

Consulta de cliente

La función WSAEnumNameSpaceProviders permite a una aplicación detectar qué espacios de nombres son accesibles a través de las instalaciones de resolución de nombres winsock. También permite a una aplicación determinar si un espacio de nombres determinado es compatible con más de un proveedor de espacios de nombres y detectar el identificador del proveedor para cualquier proveedor de espacio de nombres determinado. Con un identificador de proveedor, la aplicación puede restringir una operación de consulta a un proveedor de espacios de nombres especificado.

Las operaciones de consulta de espacio de nombres winsock implican una serie de llamadas: WSALookupServiceBegin, seguidas de una o varias llamadas a WSALookupServiceNext y finalizan con una llamada a WSALookupServiceEnd. WSALookupServiceBegin toma una estructura WSAQUERYSET como entrada para definir los parámetros de consulta junto con un conjunto de marcas para proporcionar control adicional sobre la operación de búsqueda. Devuelve un identificador de consulta que se usa en las llamadas posteriores a WSALookupServiceNext y WSALookupServiceEnd.

La aplicación invoca WSALookupServiceNext para obtener los resultados de la consulta, con los resultados proporcionados en un búfer WSAQUERYSET proporcionado por la aplicación. La aplicación sigue llamando a WSALookupServiceNext hasta que se devuelva el código de error WSA_E_NO_MORE que indica que se han recuperado todos los resultados. A continuación, la búsqueda finaliza mediante una llamada a WSALookupServiceEnd. La función WSALookupServiceEnd también se puede usar para cancelar un WSALookupServiceNext pendiente actualmente cuando se llama desde otro subproceso.

En Windows Sockets 2, los códigos de error en conflicto se definen para WSAENOMORE (10102) y WSA_E_NO_MORE (10110). El código de error WSAENOMORE se quitará en una versión futura y solo permanecerán WSA_E_NO_MORE. Sin embargo, para Windows Sockets 2, las aplicaciones deben comprobar tanto WSAENOMORE como WSA_E_NO_MORE para obtener la mayor compatibilidad posible con los proveedores de espacios de nombres que usan cualquiera de ellas.

Funciones del asistente

Las funciones auxiliares de resolución de nombres incluyen una función para recuperar un nombre de clase de servicio dado un identificador de clase de servicio, un par de funciones usadas para traducir una dirección de transporte entre una estructura SOCKADDR y una representación de cadena ASCII, una función para recuperar la información de esquema de clase de servicio para una clase de servicio determinada y un conjunto de macros para asignar servicios conocidos previamente a GUID asignados previamente.

Las macros siguientes de Winsock2.h ayudan en la asignación entre clases de servicio conocidas y estos espacios de nombres:

Macro Descripción
SVCID_TCP(Puerto) SVCID_UDP(Puerto)
SVCID_NETWARE(tipo de objeto)
Dado un puerto para TCP/IP o UDP/IP o el tipo de objeto en el caso de NetWare, devuelve el GUID (número de puerto en orden de host).
IS_SVCID_TCP(GUID)IS_SVCID_UDP(GUID)
IS_SVCID_NETWARE(GUID)
Devuelve TRUE si el GUID está dentro del intervalo permitido.
SET_TCP_SVCID(GUID, puerto)SET_UDP_SVCID(GUID, puerto)
Inicializa una estructura GUID con el guid equivalente para un número de puerto TCP o UDP (el número de puerto debe estar en orden de host).
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE(GUID)
Devuelve el puerto o el tipo de objeto asociado al GUID (número de puerto en orden de host).

 

getaddrinfo

GetAddrInfoEx

GetAddrInfoW

getnameinfo

GetNameInfoW

Estructuras de datos de resolución de nombres

Modelo de resolución de nombres

Resolución de nombres independiente del protocolo

Registro y resolución de nombres

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO