次の方法で共有


名前解決関数の概要

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

サービスのインストール

  • WSAInstallServiceClass
  • WSARemoveServiceClass
  • WSASetService

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

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

クライアント クエリ

  • WSAEnumNameSpaceProviders
  • WSALookupServiceBegin
  • WSALookupServiceNext
  • WSALookupServiceEndする

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 の両方をチェックして、いずれかを使用する名前空間プロバイダーとの互換性を最大限に高める必要があります。

ヘルパー関数

  • WSAGetServiceClassNameByClassId
  • WSAAddressToString
  • WSAStringToAddress
  • WSAGetServiceClassInfo

名前解決ヘルパー関数には、サービス クラス識別子を指定してサービス クラス名を取得する関数、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