다음을 통해 공유


서버 애플리케이션 중지

서버 애플리케이션은 RpcMgmtStopServerListeningRpcServerUnregisterIf를 호출하거나 호스트 프로세스를 종료하여 클라이언트에 대한 수신 대기를 중지할 수 있습니다. 두 방법 모두 허용됩니다. 서버가 첫 번째 방법을 따르는 경우 다음 단계를 구현해야 합니다.

서버 함수 RpcServerListen 은 예외가 발생하거나 RpcMgmtStopServerListening 호출이 발생할 때까지 호출 프로그램으로 돌아가지 않습니다. 기본적으로 다른 서버 스레드만 RpcMgmtStopServerListening을 사용하여 RPC 서버를 중지할 수 있습니다. 서버를 중지하려는 클라이언트는 오류 RPC_S_ACCESS_DENIED 받습니다. 그러나 일부 또는 모든 클라이언트가 서버를 중지할 수 있도록 RPC를 구성할 수 있습니다. 자세한 내용은 RpcMgmtStopServerListening을 참조하세요.

클라이언트 애플리케이션이 서버의 종료 루틴에 대한 원격 프로시저 호출을 수행하도록 할 수도 있습니다. 종료 루틴은 RpcMgmtStopServerListeningRpcServerUnregisterIf를 호출합니다. 이 자습서 예제 프로그램 애플리케이션은 Hellop.c 파일에 새 원격 함수 인 Shutdown을 추가하여 이 방법을 사용합니다.

Shutdown 함수에서 RpcMgmtStopServerListening에 대한 단일 null 매개 변수는 로컬 애플리케이션이 원격 프로시저 호출에 대한 수신 대기를 중지해야 했음을 나타냅니다. RpcServerUnregisterIf에 대한 두 개의 null 매개 변수는 모든 인터페이스의 등록을 취소해야 함을 나타내는 와일드카드입니다. FALSE 매개 변수는 보류 중인 호출이 완료될 때까지 기다리지 않고 즉시 레지스트리에서 인터페이스를 제거해야 했음을 나타냅니다.

/* add this function to hellop.c */
void Shutdown(void)
{
    RPC_STATUS status;
 
    status = RpcMgmtStopServerListening(NULL);
 
    if (status) 
    {
       exit(status);
    }
 
    status = RpcServerUnregisterIf(NULL, NULL, FALSE);
 
    if (status) 
    {
       exit(status);
    }
} //end Shutdown