Resumo das funções de resolução de nomes

As funções de resolução de nomes podem ser agrupadas em três categorias: instalação de serviço, consultas de cliente e auxiliar (com macros). As seções a seguir identificam as funções em cada categoria e descrevem brevemente seu uso pretendido. As principais estruturas de dados também são descritas.

Instalação do serviço

Quando a classe de serviço necessária ainda não existe, um aplicativo usa WSAInstallServiceClass para instalar uma nova classe de serviço fornecendo um nome de classe de serviço, um GUID para o identificador de classe de serviço e uma série de estruturas WSANSCLASSINFO . Essas estruturas são específicas para um namespace específico e fornecem valores comuns, como números de porta TCP recomendados ou Identificadores SAP do NetWare. Uma classe de serviço pode ser removida chamando WSARemoveServiceClass e fornecendo o GUID correspondente ao identificador de classe.

Depois que uma classe de serviço existir, instâncias específicas de um serviço poderão ser instaladas ou removidas por meio de WSASetService. Essa função usa uma estrutura WSAQUERYSET como um parâmetro de entrada, juntamente com um código de operação e sinalizadores de operação. O código de operação indica se o serviço está sendo instalado ou removido. A estrutura WSAQUERYSET fornece todas as informações relevantes sobre o serviço, incluindo identificador de classe de serviço, nome do serviço (para esta instância), informações de protocolo e identificador de namespace aplicáveis e um conjunto de endereços de transporte no qual o serviço escuta. Os serviços devem invocar WSASetService quando inicializarem para anunciar sua presença em namespaces dinâmicos.

Consulta de cliente

A função WSAEnumNameSpaceProviders permite que um aplicativo descubra quais namespaces podem ser acessados por meio de instalações de resolução de nomes winsock. Ele também permite que um aplicativo determine se um determinado namespace tem suporte de mais de um provedor de namespace e descubra o identificador do provedor para qualquer provedor de namespace específico. Usando um identificador de provedor, o aplicativo pode restringir uma operação de consulta a um provedor de namespace especificado.

As operações de consulta de namespace winsock envolvem uma série de chamadas: WSALookupServiceBegin, seguida por uma ou mais chamadas para WSALookupServiceNext e terminando com uma chamada para WSALookupServiceEnd. WSALookupServiceBegin usa uma estrutura WSAQUERYSET como entrada para definir os parâmetros de consulta junto com um conjunto de sinalizadores para fornecer controle adicional sobre a operação de pesquisa. Ele retorna um identificador de consulta que é usado nas chamadas subsequentes para WSALookupServiceNext e WSALookupServiceEnd.

O aplicativo invoca WSALookupServiceNext para obter os resultados da consulta, com resultados fornecidos em um buffer WSAQUERYSET fornecido pelo aplicativo. O aplicativo continua a chamar WSALookupServiceNext até que o código de erro WSA_E_NO_MORE seja retornado indicando que todos os resultados foram recuperados. Em seguida, a pesquisa é encerrada por uma chamada para WSALookupServiceEnd. A função WSALookupServiceEnd também pode ser usada para cancelar um WSALookupServiceNext pendente no momento quando chamado de outro thread.

No Windows Sockets 2, códigos de erro conflitantes são definidos para WSAENOMORE (10102) e WSA_E_NO_MORE (10110). O código de erro WSAENOMORE será removido em uma versão futura e somente WSA_E_NO_MORE permanecerá. No entanto, para o Windows Sockets 2, os aplicativos devem marcar para WSAENOMORE e WSA_E_NO_MORE para obter a compatibilidade mais ampla possível com provedores de namespace que usam qualquer um deles.

Funções auxiliares

As funções auxiliares de resolução de nomes incluem uma função para recuperar um nome de classe de serviço dado um identificador de classe de serviço, um par de funções usadas para traduzir um endereço de transporte entre uma estrutura SOCKADDR e uma representação de cadeia de caracteres ASCII, uma função para recuperar as informações de esquema de classe de serviço para uma determinada classe de serviço e um conjunto de macros para mapear serviços conhecidos para GUIDs pré-alocados.

As macros a seguir do Winsock2.h auxiliam no mapeamento entre classes de serviço conhecidas e esses namespaces:

Macro Descrição
SVCID_TCP(Port) SVCID_UDP(Port)
SVCID_NETWARE(Tipo de Objeto)
Dada uma porta para TCP/IP ou UDP/IP ou o tipo de objeto no caso do NetWare, retorna o GUID (número da porta na ordem do host).
IS_SVCID_TCP(GUID)IS_SVCID_UDP(GUID)
IS_SVCID_NETWARE(GUID)
Retornará TRUE se o GUID estiver dentro do intervalo permitido.
SET_TCP_SVCID(GUID, porta)SET_UDP_SVCID(GUID, porta)
Inicializa uma estrutura GUID com o guid equivalente para um número de porta TCP ou UDP (o número da porta deve estar na ordem do host).
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE(GUID)
Retorna o tipo de porta ou objeto associado ao GUID (número da porta na ordem do host).

 

Getaddrinfo

GetAddrInfoEx

GetAddrInfoW

Getnameinfo

GetNameInfoW

Estruturas de dados de resolução de nomes

Modelo de resolução de nomes

Resolução de nomes independentes de protocolo

Registro e resolução de nomes

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

Wsalookupservicebegin

Wsalookupserviceend

Wsalookupservicenext

WSARemoveServiceClass

Wsasetservice

WSAQUERYSET

WSANSCLASSINFO