Поделиться через


Сводка функций разрешения имен

Функции разрешения имен можно сгруппировать в три категории: установка службы, клиентские запросы и вспомогательные функции (с макросами). В следующих разделах определяются функции в каждой категории и кратко описывается их предполагаемое использование. Также описываются ключевые структуры данных.

Установка службы

Если требуемый класс службы еще не существует, приложение использует WSAInstallServiceClass для установки нового класса службы, указав имя класса службы, GUID для идентификатора класса службы и ряд структур WSANSCLASSINFO . Каждая из этих структур зависит от конкретного пространства имен и предоставляет общие значения, такие как рекомендуемые номера TCP-портов или идентификаторы NETWare SAP. Класс службы можно удалить, вызвав WSARemoveServiceClass и указав GUID, соответствующий идентификатору класса.

После существования класса службы определенные экземпляры службы можно установить или удалить с помощью WSASetService. Эта функция принимает структуру WSAQUERYSET в качестве входного параметра, а также код операции и флаги операции. Код операции указывает, устанавливается или удаляется служба. Структура WSAQUERYSET предоставляет все необходимые сведения о службе, включая идентификатор класса службы, имя службы (для этого экземпляра), применимые идентификаторы пространства имен и сведения о протоколе, а также набор адресов транспорта, по которым служба ожидает передачи данных. Службы должны вызывать WSASetService при инициализации, чтобы объявить о своем присутствии в динамических пространствах имен.

Запрос клиента

Функция WSAEnumNameSpaceProviders позволяет приложению определить, какие пространства имен доступны через средства разрешения имен Winsock. Он также позволяет приложению определить, поддерживается ли заданное пространство имен несколькими поставщиками пространств имен, и обнаружить идентификатор поставщика для любого конкретного поставщика пространства имен. Используя идентификатор поставщика, приложение может ограничить операцию запроса указанным поставщиком пространства имен.

Операции winsock namespace-query включают ряд вызовов : WSALookupServiceBegin, за которыми следует один или несколько вызовов WSALookupServiceNext и заканчиваются вызовом WSALookupServiceEnd. WSALookupServiceBegin принимает в качестве входных данных структуру WSAQUERYSET для определения параметров запроса и набора флагов, которые обеспечивают дополнительный контроль над операцией поиска. Он возвращает дескриптор запроса, который используется в последующих вызовах WSALookupServiceNext и WSALookupServiceEnd.

Приложение вызывает WSALookupServiceNext для получения результатов запроса, а результаты предоставляются в буфере WSAQUERYSET , предоставленном приложением. Приложение продолжает вызывать WSALookupServiceNext , пока не будет возвращен код ошибки WSA_E_NO_MORE, указывающий, что все результаты получены. Затем поиск завершается вызовом WSALookupServiceEnd. Функцию WSALookupServiceEnd можно также использовать для отмены текущего ожидающего WSALookupServiceNext при вызове из другого потока.

В windows Sockets 2 конфликтующие коды ошибок определяются для WSAENOMORE (10102) и WSA_E_NO_MORE (10110). Код ошибки WSAENOMORE будет удален в следующей версии и останется только WSA_E_NO_MORE. Однако для windows Sockets 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)
Возвращает значение TRUE , если GUID находится в допустимом диапазоне.
SET_TCP_SVCID(GUID, порт)SET_UDP_SVCID(GUID, порт)
Инициализирует структуру GUID с эквивалентом GUID для номера порта TCP или UDP (номер порта должен быть в порядке узла).
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE(GUID)
Возвращает тип порта или объекта, связанный с GUID (номер порта в порядке размещения).

 

getaddrinfo

GetAddrInfoEx

GetAddrInfoW

getnameinfo

GetNameInfoW

Структуры данных разрешения имен

Модель разрешения имен

Независимое от протокола разрешение имен

Регистрация и разрешение имен

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO