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


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

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

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

Если требуемый класс службы еще не существует, приложение использует WSAInstallServiceClass для установки нового класса службы, указав имя класса службы, GUID для идентификатора класса службы и ряд структур WSANSCLASSINFO. Эти структуры относятся к конкретному пространству имен и предоставляют общие значения, такие как рекомендуемые номера TCP-портов или идентификаторы SAP NetWare. Класс службы можно удалить, вызвав 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 можно также использовать для отмены ожидающего WSALookupServiceNex t при вызове из другого потока.

В сокетах 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)
Возвращает 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

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

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

разрешения именProtocol-Independent

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

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO