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