LPWSPSOCKET コールバック関数 (ws2spi.h)
LPWSPSocket 関数はソケットを作成します。 共有ソケットの作成で LPWSPSocket によって再生される部分の詳細については、「SPI の 共有ソケット と 共有ソケット」を参照してください。
構文
LPWSPSOCKET Lpwspsocket;
SOCKET Lpwspsocket(
[in] int af,
[in] int type,
[in] int protocol,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[in] GROUP g,
DWORD dwFlags,
[out] LPINT lpErrno
)
{...}
パラメーター
[in] af
アドレス ファミリの仕様。
[in] type
新しいソケットの型指定。
[in] protocol
指定されたアドレス ファミリに固有のソケットで使用されるプロトコル。
[in] lpProtocolInfo
作成するソケットの特性を定義する WSAProtocol_Info 構造体へのポインター。
[in] g
予約済み。
dwFlags
ソケット属性の仕様。
[out] lpErrno
エラー コードへのポインター。
戻り値
エラーが発生しない場合、 LPWSPSocket は新しいソケットを参照する記述子を返します。 それ以外の場合は、INVALID_SOCKETの値が返され、 lpErrno で特定のエラー コードを使用できます。
エラー コード | 意味 |
---|---|
ネットワーク サブシステムが失敗しました。 | |
指定されたアドレス ファミリはサポートされていません。 | |
Windows ソケット呼び出しのブロックが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 | |
これ以上使用できるソケット記述子がありません。 | |
バッファーに空き領域がありません。 ソケットを作成できません。 | |
指定されたプロトコルはサポートされません。 | |
指定されたプロトコルがこのソケットに対して正しくない型です。 | |
指定されたソケットの種類は、このアドレス ファミリではサポートされていません。 | |
指定されたパラメーター g が無効です。 |
注釈
LPWSPSocket 関数を使用すると、ソケット記述子と関連リソースが割り当てられます。 既定では、作成されたソケットには重複する属性はありません。 Windows ソケット プロバイダーは、Windows インストール可能なファイル システムとして実現し、システム ファイル ハンドルをソケット記述子として提供することをお勧めします。 これらのプロバイダーは、この関数から戻る前 に WPUModifyIFSHandle を呼び出す必要があります。 ファイル システム以外の Windows ソケット プロバイダーの場合、この関数から戻る前に 、WPUCreateSocketHandle を使用して、Ws2_32.dll から一意のソケット記述子を取得する必要があります。 参照先
詳細については、記述子の割り当てに関するページを参照してください。
af、type、protocol の値は、対応する API 関数ソケットまたは WSASocket でアプリケーションによって提供される値です。 サービス プロバイダーは、特定のプロトコルに適したこれらの値の一部またはすべてを無視したり、注意を払ったりすることができます。 ただし、Ws2_32.dll ではこれらの値がワイルドカード値と見なされるため、 af と type には 0 の値を受け入れる必要があります。 また、マニフェスト定数 FROM_PROTOCOL_INFO の値は、 af、 type、および protocol のいずれかに対して受け入れられる必要があります。 この値は、Windows Sockets 2 アプリケーションが WSAProtocol_Info 構造体 (iAddressFamily、 iSocketType、 iProtocol) の対応する値を使用する必要があることを示します。
dwFlags パラメーターを使用すると、次のいずれかのフラグでビットごとの OR 演算子を使用して、ソケットの属性を指定できます。
フラグ | 説明 |
---|---|
WSA_FLAG_OVERLAPPED | このフラグにより、重複したソケットが作成されます。 重複するソケットでは、重複する I/O 操作に LPWSPSend、 LPWSPSendTo、 LPWSPRecv、 LPWSPRecvFrom、 LPWSPIoctl を使用できます。これにより、複数の操作を同時に開始および処理中にすることができます。 重複する操作を許可するすべての関数は、重複する操作に関連するパラメーターの値が null の場合、重複するソケットでのオーバーラップされていない使用もサポートします。 |
WSA_FLAG_MULTIPOINT_C_ROOT | 作成されたソケットがマルチポイント セッションのc_rootであることを示します。 ルート化されたコントロール プレーンがプロトコルの WSAProtocol_Info 構造で示されている場合にのみ許可されます。 |
WSA_FLAG_MULTIPOINT_C_LEAF | 作成されたソケットがマルチキャスト セッションのc_leafであることを示します。 プロトコルの WSAProtocol_Info構造に XP1_SUPPORT_MULTIPOINTが示されている場合にのみ許可されます。 |
WSA_FLAG_MULTIPOINT_D_ROOT | 作成されたソケットがマルチポイント セッションのd_rootであることを示します。 ルート化されたデータ プレーンがプロトコルの WSAProtocol_Info 構造で示されている場合にのみ許可されます。 |
WSA_FLAG_MULTIPOINT_D_LEAF | 作成されたソケットがマルチポイント セッションのd_leafであることを示します。 プロトコルの WSAProtocol_Info構造に XP1_SUPPORT_MULTIPOINTが示されている場合にのみ許可されます。 |
注意
マルチポイント ソケットの場合は、1 つのWSA_FLAG_MULTIPOINT_C_ROOTまたはWSA_FLAG_MULTIPOINT_C_LEAFを指定し、WSA_FLAG_MULTIPOINT_D_ROOTまたはWSA_FLAG_MULTIPOINT_D_LEAFの 1 つを指定する必要があります。 詳細については、 SPI のプロトコルに依存しないマルチキャストとマルチポイントに 関するページを参照してください。
SOCK_STREAMなどの接続指向ソケットは、全二重接続を提供し、データを送受信する前に接続状態である必要があります。 LPWSPConnect 呼び出しを使用して、別のソケットへの接続が作成されます。 接続されると、 LPWSPSend 呼び出しと LPWSPRecv 呼び出しを使用してデータを転送できます。 セッションが完了したら、 LPWSPCloseSocket を実行する必要があります。
信頼性の高い接続指向ソケットを実装するために使用される通信プロトコルにより、データが失われたり重複したりすることがないようにします。 ピア プロトコルにバッファー領域があるデータを適切な時間内に正常に送信できない場合、接続は切断されたと見なされ、その後の呼び出しは WSAETIMEDOUT に設定されたエラー コードで失敗します。
コネクションレスのメッセージ指向ソケットを使用すると、 LPWSPSendTo と LPWSPRecvFrom を使用して、任意のピアとの間でデータグラムを送受信できます。 このようなソケットが LPWSPConnect を使用して特定のピアに接続されている場合、データグラムは LPWSPSend を使用してそのピアに送信でき、 LPWSPRecv を使用してこのピアから (のみ) 受信できます。
SOCK RAW 型のソケットのサポートは必要ありませんが、サービス プロバイダーは、それを行うのが理にかなっている場合は常に生ソケットをサポートすることをお勧めします。
階層型サービス プロバイダーは、この関数の実装を提供しますが、プロトコル チェーン内の次のレイヤーの LPWSPSocket を呼び出す場合、また、この関数のクライアントでもあります。 この関数の lpProtocolInfo パラメーターは、プロトコル チェーンのレイヤーを経由して伝達されるため、いくつかの特別な考慮事項が適用されます。
プロトコル チェーン内の次のレイヤーが別のレイヤーである場合、次のレイヤーの LPWSPSocket が呼び出されると、このレイヤーは、同じ変更されていないチェーン情報を持つ同じ変更されていないWSAProtocol_Info構造を参照する lpProtocolInfo を次のレイヤー に 渡す必要があります。 ただし、次のレイヤーが基本プロトコル (つまり、チェーン内の最後の要素) である場合、このレイヤーは、ベース プロバイダーの LPWSPSocket を呼び出すときに置換を実行します。 この場合、ベース プロバイダーの WSAPROTOCOL_INFO 構造体は lpProtocolInfo パラメーターで参照する必要があります。
このポリシーの重要な利点の 1 つは、基本サービス プロバイダーがプロトコル チェーンを認識する必要ができないことです。
この同じ伝達ポリシーは、LPWSPAddressToString、LPWSPDuplicateSocket、WSPStartup、LPWSPStringToAddress などの他の関数の階層化されたシーケンスを介して、WSAProtocol_Info構造体を伝達する場合にも適用されます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | ws2spi.h |