서버 컨텍스트 런다운 루틴
서버가 클라이언트를 대신하여 컨텍스트를 유지하는 동안 통신이 중단되는 경우 지정된 클라이언트를 대신하여 서버에서 유지 관리하는 상태를 클린 정리 루틴이 필요할 수 있습니다. 이 정리 루틴을 컨텍스트 런다운 루틴이라고 합니다. 연결이 끊어지면 서버 스텁 및 런타임 라이브러리는 클라이언트에서 연 모든 컨텍스트 핸들에서 이 루틴을 호출합니다.
컨텍스트 런다운 루틴은 형식 정의에 [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);
}