複数のプロトコルの使用

アプリケーションでは 、WSAEnumProtocols 関数を使用して、存在するトランスポート プロトコルとプロトコル チェーンを決定し、関連付けられている WSAPROTOCOL_INFO 構造体に含まれるそれぞれに関する情報を取得します。

ほとんどの場合、プロトコルまたはプロトコル チェーンごとに 1 つの WSAPROTOCOL_INFO 構造があります。 ただし、一部のプロトコルでは複数の動作が示されます。 たとえば、SPX プロトコルはメッセージ指向ですが (つまり、送信側のメッセージ境界はネットワークによって保持されます)、受信側のソケットはこれらのメッセージ境界を無視してバイト ストリームとして扱うことができます。 したがって、SPX には 2 つの異なる WSAPROTOCOL_INFO 構造エントリが存在する可能性があります。1 つは動作ごとに 1 つです。

Windows ソケット 2 では、いくつかの新しいアドレス ファミリ、ソケットの種類、およびプロトコル値が表示されます。 Windows Sockets 1.1 では、少数の既知のソケット型とプロトコル識別子で構成される IPv4 の単一アドレス ファミリ (AF_INET) がサポートされていました。 Windows ソケット 2 では、互換性上の理由から、既存のアドレス ファミリ、ソケットの種類、プロトコル識別子が保持されますが、新しいメディアの種類を持つ新しいトランスポート プロトコルの新しいアドレス ファミリ値もサポートされています。

新しい一意識別子は必ずしもよく知られているわけではありませんが、問題は発生しません。 プロトコルに依存しない必要があるアプリケーションは、 socket_type またはプロトコル パラメーターに割り当てられた値ではなく、その適合性に基づいて プロトコル を選択することをお勧めします。 プロトコルの適合性は、プロトコル のWSAPROTOCOL_INFO 構造に含まれる通信属性 (メッセージとバイト ストリーム、信頼できるストリームと信頼できないストリームなど) によって示されます。 既知のプロトコル名とソケットの種類とは対照的に、適合性に基づいてプロトコルを選択すると、プロトコルに依存しないアプリケーションでは、使用可能になったときに、新しいトランスポート プロトコルとそれに関連付けられているメディアの種類を利用できます。

クライアント/サーバー アプリケーションのサーバーの半分は、すべての適切なトランスポート プロトコルでリッスン ソケットを確立することで利点があります。 その後、クライアントは任意の適切なプロトコルを使用して接続を確立できます。 たとえば、クライアント アプリケーションが LAN 経由で接続されているデスクトップ システムで実行されていたか、ワイヤレス ネットワークを使用してノート PC 上で実行されていたかに関係なく、クライアント アプリケーションを変更できなくなります。