PFN_WSK_RECEIVE コールバック関数 (wsk.h)
WskReceive 関数は、リモート トランスポート アドレスから接続指向またはストリーム ソケット経由でデータを受信します。
構文
PFN_WSK_RECEIVE PfnWskReceive;
NTSTATUS PfnWskReceive(
[in] PWSK_SOCKET Socket,
[in] PWSK_BUF Buffer,
[in] ULONG Flags,
[in, out] PIRP Irp
)
{...}
パラメーター
[in] Socket
データを受信するソケットのソケット オブジェクトを指定する WSK_SOCKET 構造体へのポインター。
[in] Buffer
ソケットからデータを受信するデータ バッファーを記述する初期化された WSK_BUF 構造体へのポインター。
[in] Flags
次のフラグの組み合わせのビットごとの OR を含む ULONG 値。
WSK_FLAG_WAITALL
データ バッファーがいっぱいになるまで待ちます。 このフラグを指定した場合、Irp パラメーターで指定された IRP は、次のいずれかのイベントが発生するまで完了しません。
- Buffer パラメーターによって指されるWSK_BUF構造体によって記述されるデータ バッファー が完全に入力されます。
- 接続はリモート送信者によって正常に切断されます。
- 接続は、WSK アプリケーションまたはリモート送信者によって中止されます。
- 指定した IRP が取り消されます。
WSK_FLAG_DRAIN
ソケットが切断されるまで待ち、ソケットで受信したデータを破棄します。 このフラグを指定すると、次のいずれかのイベントが発生するまで、指定した IRP は完了しません。
- 接続はリモート送信者によって正常に切断されます。
- 接続は、WSK アプリケーションまたはリモート送信者によって中止されます。
- 指定した IRP が取り消されます。
このフラグは、Microsoft TCP/IP トランスポート プロトコルでサポートされています。 このフラグは、他のトランスポート プロトコルではサポートされていない可能性があります。
WSK_FLAG_WAITALLフラグとWSK_FLAG_DRAIN フラグは相互に排他的です。 WSK アプリケーションでは、これらのフラグの両方を同時に指定しないでください。
[in, out] Irp
WSK サブシステムが受信操作を非同期的に完了するために使用する、呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数での IRP の使用の詳細については、「 Winsock カーネル関数での IRP の使用」を参照してください。
戻り値
WskReceive は 、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
ソケットからデータが正常に受信されました。 IRP は成功状態で完了します。 IRP の IoStatus.Information フィールドには、受信したバイト数が含まれています。 |
|
WSK サブシステムは、ソケットからすぐにデータを受信できませんでした。 WSK サブシステムは、ソケットからデータを受信した後、IRP を完了します。 受信操作の状態は、IRP の IoStatus.Status フィールドに返されます。 操作が成功した場合、IRP の IoStatus.Information フィールドには、受信したバイト数が含まれます。 |
|
ソケットは機能しなくなりました。 IRP は失敗状態で完了します。 WSK アプリケーションは、できるだけ早くソケットを閉じる には、WskCloseSocket 関数を呼び出す必要があります。 |
|
指定したフラグは、基になるネットワーク トランスポートではサポートされていません。 |
|
エラーが発生しました。 IRP は失敗状態で完了します。 |
注釈
WSK アプリケーションは、以前にリモート トランスポート アドレスに接続されている接続指向またはストリーム ソケットでのみ WskReceive 関数を呼び出すことができます。 接続指向ソケットは、次のいずれかの方法でリモート トランスポート アドレスに接続されます。
- WSK アプリケーションは、 WskConnect 関数を呼び出してソケットを接続します。
- WSK アプリケーションは、 WskSocketConnect 関数を呼び出してソケットを作成、バインド、接続します。
- WSK アプリケーションがリッスンしているソケットで受信接続要求を受け入れると、WSK サブシステムはソケットを接続します。
WSK アプリケーションは、Buffer パラメーターによって指されるWSK_BUF構造体の Length メンバーで指定された長さ 0 の WskReceive 関数を呼び出すことができます。 このメンバーに長さ 0 を指定すると、次の状況で役立ちます。
- 以前に返された WskReceiveEvent イベント コールバック関数の後にソケットに対して WskReceiveEvent イベント コールバック関数を再度有効にするとSTATUS_DATA_NOT_ACCEPTED
- ソケットで受信した追加データを破棄するWSK_FLAG_DRAIN フラグを指定する場合
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wsk.h (Wsk.h を含む) |
IRQL | <= DISPATCH_LEVEL |