次の方法で共有


サーバー コンテキストランダウン ルーチン

サーバーがクライアントに代わってコンテキストを維持している間に通信が中断した場合、特定のクライアントに代わってサーバーによって維持される状態をクリーンするためにクリーンアップ ルーチンが必要になる場合があります。 このクリーンアップ ルーチンは、 コンテキスト ランダウン ルーチンと呼ばれます。 接続が切断されると、サーバー スタブとランタイム ライブラリは、クライアントによって開かれるすべてのコンテキスト ハンドルでこのルーチンを呼び出します。

コンテキスト ランダウン ルーチンは、型定義に [context_handle] 属性を適用するときに必要であり、暗黙的に宣言され、名前が付けられます。 [context_handle] 属性がパラメーターに直接適用されている場合、サーバーはコンテキスト ランダウン ルーチンを呼び出しません。

コンテキスト ランダウン ルーチンの構文は次のとおりです。

void __RPC_USER type-id_rundown (type-id);

型名によってコンテキスト ランダウン ルーチンの名前が決まる点に注意してください。

次のコード フラグメントは、サンプル コンテキストランダウン ルーチンを示します。 コンテキスト ハンドルを使用したインターフェイス開発、コンテキスト ハンドルを使用したサーバー開発、およびコンテキスト ハンドルを使用したクライアント開発の例で使用される RemoteClose プロシージャを呼び出す。 このプロシージャは、ファイル ハンドルを閉じ、ファイルに関連付けられているメモリを解放し、コンテキスト ハンドルに NULL を 割り当てます。 NULL の割り当ては RemoteClose 関数を呼び出した結果であり、ランダウン シナリオでは必要ありません。 RPC ランタイムは、コンテキスト ハンドルが NULL に設定されているかどうかに関係なく、状態をクリーンアップ します

//file: cxhndp.c (fragment of file containing remote procedures)
//The rundown routine is associated with the context handle type.  
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(
    PCONTEXT_HANDLE_TYPE phContext)
{
    printf("Client died with an open file, closing it..\n");
    RemoteClose(&phContext);
    assert(phContext == 0);
}