名称解析函数摘要
名称解析函数可以分为三类:服务安装、客户端查询和帮助程序(包含宏)。 以下各节标识每个类别中的函数,并简要描述其预期用途。 还介绍了关键数据结构。
服务安装
当所需的服务类尚不存在时,应用程序使用 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,以尽可能与使用任一提供程序的命名空间提供程序兼容。
帮助程序函数
名称解析帮助程序函数包括一个函数,用于检索给定服务类标识符的服务类名称、用于转换 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 关联的端口或对象类型(主机顺序中的端口号)。 |
相关主题