名前解決関数は、サービス インストール、クライアント クエリ、ヘルパー (マクロ付き) の 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をする
-
名前解決 のProtocol-Independent
-
SOCKADDRをする
-
WSAEnumNameSpaceProvidersの
-
WSAGetServiceClassNameByClassIdの
-
WSAInstallServiceClassの
-
WSALookupServiceBeginの
-
WSALookupServiceEndをする
-
WSALookupServiceNextの
-
WSARemoveServiceClassの
-
WSASetServiceの
-
WSAQUERYSETの
-
WSANSCLASSINFOの