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