Interrompendo o aplicativo de servidor

Um aplicativo de servidor pode parar de escutar clientes chamando RpcMgmtStopServerListening e RpcServerUnregisterIf ou simplesmente saindo do processo de host. Ambos os métodos são aceitáveis. Se o servidor seguir a primeira abordagem, ele deverá implementar as seguintes etapas:

A função de servidor RpcServerListen não retorna ao programa de chamada até que ocorra uma exceção ou até que ocorra uma chamada para RpcMgmtStopServerListening . Por padrão, somente outro thread de servidor tem permissão para interromper o servidor RPC usando RpcMgmtStopServerListening. Os clientes que tentarem interromper o servidor receberão o erro RPC_S_ACCESS_DENIED. No entanto, é possível configurar o RPC para permitir que alguns ou todos os clientes interrompam o servidor. Consulte RpcMgmtStopServerListening para obter detalhes.

Você também pode fazer com que o aplicativo cliente faça uma chamada de procedimento remoto para uma rotina de desligamento no servidor. A rotina de desligamento chama RpcMgmtStopServerListening e RpcServerUnregisterIf. Este aplicativo de programa de exemplo de tutorial usa essa abordagem adicionando uma nova função remota, Shutdown, ao arquivo Hellop.c.

Na função Desligamento , o parâmetro nulo único para RpcMgmtStopServerListening indica que o aplicativo local deve parar de escutar chamadas de procedimento remoto. Os dois parâmetros nulos para RpcServerUnregisterIf são curingas, indicando que todas as interfaces devem ser canceladas. O parâmetro FALSE indica que a interface deve ser removida do registro imediatamente, em vez de aguardar a conclusão das chamadas pendentes.

/* 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