名前解決関数の概要

名前解決関数は、サービスのインストール、クライアント クエリ、ヘルパー (マクロを含む) の 3 つのカテゴリにグループ化できます。 以下のセクションでは、各カテゴリの関数を特定し、目的の用途について簡単に説明します。 また、主要なデータ構造についても説明します。

サービスのインストール

必要なサービス クラスがまだ存在しない場合、アプリケーションは WSAInstallServiceClass を使用して、サービス クラス名、サービス クラス識別子の GUID、および一連の WSANSCLASSINFO 構造体を指定して、新しいサービス クラスをインストールします。 これらの構造体はそれぞれ特定の名前空間に固有であり、推奨される TCP ポート番号や NetWare SAP 識別子などの一般的な値を指定します。 サービス クラスを削除するには、 WSARemoveServiceClass を呼び出し、クラス識別子に対応する GUID を指定します。

サービス クラスが存在すると、 WSASetService を使用してサービスの特定のインスタンスをインストールまたは削除できます。 この関数は、 WSAQUERYSET 構造体を操作コードと操作フラグと共に入力パラメーターとして受け取ります。 操作コードは、サービスがインストールされているか削除されているかを示します。 WSAQUERYSET 構造体は、サービス クラス識別子、サービス名 (このインスタンスの場合)、適用可能な名前空間識別子とプロトコル情報、サービスがリッスンするトランスポート アドレスのセットなど、サービスに関するすべての関連情報を提供します。 サービスは、動的名前空間でのプレゼンスをアドバタイズするために初期化するときに WSASetService を呼び出す必要があります。

クライアント クエリ

WSAEnumNameSpaceProviders 関数を使用すると、アプリケーションは Winsock の名前解決機能を使用してアクセスできる名前空間を検出できます。 また、アプリケーションは、特定の名前空間が複数の名前空間プロバイダーによってサポートされているかどうかを判断し、特定の名前空間プロバイダーのプロバイダー識別子を検出することもできます。 プロバイダー識別子を使用すると、アプリケーションはクエリ操作を指定された名前空間プロバイダーに制限できます。

Winsock 名前空間クエリ操作には、 WSALookupServiceBegin という一連の呼び出しが含まれます。その後、 WSALookupServiceNext への 1 つ以上の呼び出しが続き、 WSALookupServiceEnd の呼び出しで終わる必要があります。 WSALookupServiceBegin は、検索操作をさらに制御するためのフラグのセットと共にクエリ パラメーターを定義するための入力として WSAQUERYSET 構造体を受け取ります。 これは、 WSALookupServiceNext および WSALookupServiceEnd の後続の呼び出しで使用されるクエリ ハンドル を返します

アプリケーションは WSALookupServiceNext を呼び出してクエリ結果を取得し、結果はアプリケーション提供の WSAQUERYSET バッファーで提供されます。 すべての結果が取得されたことを示すエラー コード WSA_E_NO_MOREが返されるまで、アプリケーションは WSALookupServiceNext を呼び出し続けます。 その後、 検索は WSALookupServiceEnd の呼び出しによって終了します。 WSALookupServiceEnd 関数を使用して、別のスレッドから呼び出されたときに、現在保留中の WSALookupServiceNext を取り消すこともできます。

Windows ソケット 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)
GUID が許容範囲内にある場合は TRUE を 返します。
SET_TCP_SVCID(GUID, port)SET_UDP_SVCID(GUID, port)
TCP または UDP ポート番号に相当する GUID を使用して GUID 構造体を初期化します (ポート番号はホスト順である必要があります)。
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