非ブロッキング ソケットを使用して多重化する IO Completion Ports を使用するプログラムを作成した場合、getQueuedCompletionStatus が返されたときに、ソケットで実行された関数が send または recv のどちらであったかをどのように知ることができますか?
前もって感謝します :)
非ブロッキング ソケットを使用して多重化する IO Completion Ports を使用するプログラムを作成した場合、getQueuedCompletionStatus が返されたときに、ソケットで実行された関数が send または recv のどちらであったかをどのように知ることができますか?
前もって感謝します :)
その操作に使用された OVERLAPPED 構造体へのポインターを受け取っています。OVERLAPPED 構造を含む別の構造を作成するだけなので、完了ステータスで OVERLAPPED を取得すると、それを構造に変えることができます。
struct MyOverlapped
{
OVERLAPPED SystemOverlapped;
int MyStuff;
void* MoreStuffForMe;
};
明らかに、受け取った OVERLAPPED* を MyOverlapped* にキャストするだけで、フィールドにアクセスできます。フィールドに何を入れるかはあなた次第です。
EDIT:C++継承も機能するはずなので、あなたもできる
struct MyOverlapped : public OVERLAPPED
{
...
};
ああ、わからない。ReadFileEx、WriteFileEx 呼び出しの開始で渡されるバッファ構造体にブール値を入れます。そんな感じ...