名称解析函数摘要
名称解析函数可分为三类:服务安装、客户端查询和帮助程序 (宏) 。 以下各节标识每个类别中的函数,并简要描述其预期用途。 此外,还介绍了关键数据结构。
服务安装
当所需的服务类尚不存在时,应用程序使用 WSAInstallServiceClass 通过提供服务类名称、服务类标识符的 GUID 以及一系列 WSANSCLASSINFO 结构来安装新的服务类。 这些结构都特定于特定的命名空间,并提供常见值,例如建议的 TCP 端口号或 NetWare SAP 标识符。 可以通过调用 WSARemoveServiceClass 并提供与类标识符对应的 GUID 来删除服务类。
服务类存在后,可以通过 WSASetService 安装或删除服务的特定实例。 此函数将 WSAQUERYSET 结构作为输入参数以及操作代码和操作标志。 操作代码指示是安装还是移除服务。 WSAQUERYSET 结构提供有关服务的所有相关信息,包括服务类标识符、此实例的服务名称 () 、适用的命名空间标识符和协议信息,以及服务侦听的一组传输地址。 服务在初始化时应调用 WSASetService ,以在动态命名空间中播发其存在。
客户端查询
WSAEnumNameSpaceProviders 函数允许应用程序发现可通过 Winsock 名称解析设施访问的命名空间。 它还允许应用程序确定给定命名空间是否受多个命名空间提供程序支持,并发现任何特定命名空间提供程序的提供程序标识符。 使用提供程序标识符,应用程序可以将查询操作限制为指定的命名空间提供程序。
Winsock 命名空间查询操作涉及一系列调用: WSALookupServiceBegin,后跟对 WSALookupServiceNext 的一个或多个调用,最后调用 WSALookupServiceEnd。 WSALookupServiceBegin 采用 WSAQUERYSET 结构作为输入来定义查询参数以及一组标志,以提供对搜索操作的额外控制。 它返回一个查询句柄,该句柄用于对 WSALookupServiceNext 和 WSALookupServiceEnd 的后续调用。
应用程序调用 WSALookupServiceNext 以获取查询结果,结果在应用程序提供的 WSAQUERYSET 缓冲区中提供。 应用程序继续调用 WSALookupServiceNext ,直到返回指示已检索所有结果的错误代码WSA_E_NO_MORE。 然后,通过调用 WSALookupServiceEnd 终止搜索。 WSALookupServiceEnd 函数还可用于从另一个线程调用时取消当前挂起的 WSALookupServiceNext。
在 Windows 套接字 2 中,为 WSAENOMORE (10102) 和 WSA_E_NO_MORE (10110) 定义了冲突错误代码。 未来版本中将删除错误代码 WSAENOMORE,并且仅保留WSA_E_NO_MORE。 但是,对于 Windows 套接字 2,应用程序应同时检查 WSAENOMORE 和 WSA_E_NO_MORE,以便与使用任一提供程序的命名空间提供程序尽可能广泛地兼容。
Helper 函数
名称解析帮助程序函数包括一个用于检索给定服务类标识符的服务类名称的函数、一对用于转换 SOCKADDR 结构和 ASCII 字符串表示形式的传输地址的函数、一个用于检索给定服务类的服务类架构信息的函数,以及一组用于将已知服务映射到预分配的 GUID 的宏。
Winsock2.h 中的以下宏有助于在已知的服务类和这些命名空间之间进行映射:
宏 | 说明 |
---|---|
SVCID_TCP (端口) SVCID_UDP (端口) SVCID_NETWARE (对象类型) |
给定 TCP/IP 或 UDP/IP 的端口或 NetWare 中的对象类型,将按主机顺序) 返回 GUID (端口号。 |
IS_SVCID_TCP (GUID) IS_SVCID_UDP (GUID) IS_SVCID_NETWARE (GUID) |
如果 GUID 在允许的范围内,则返回 TRUE 。 |
SET_TCP_SVCID (GUID、端口) SET_UDP_SVCID (GUID、端口) |
使用与 TCP 或 UDP 端口号的 GUID 等效项初始化 GUID 结构, (端口号必须按主机顺序) 。 |
PORT_FROM_SVCID_TCP (GUID) PORT_FROM_SVCID_UDP (GUID) SAPID_FROM_SVCID_NETWARE (GUID) |
以主机顺序) 返回与 GUID 关联的端口或对象类型 (端口号。 |
相关主题