Delen via


De servertoepassing stoppen

Een servertoepassing kan stoppen met luisteren naar clients door RpcMgmtStopServerListening en RpcServerUnregisterIfaan te roepen of door het hostproces af te sluiten. Beide methoden zijn acceptabel. Als de server de eerste aanpak volgt, moet deze de volgende stappen implementeren:

De serverfunctie RpcServerListen keert pas terug naar het aanroepende programma als er een uitzondering optreedt of totdat een aanroep naar RpcMgmtStopServerListening plaatsvindt. Standaard is alleen een andere serverthread toegestaan om de RPC-server te stoppen met behulp van RpcMgmtStopServerListening. Clients die proberen de server te stoppen, krijgen de foutmelding RPC_S_ACCESS_DENIED. Het is echter mogelijk om RPC te configureren zodat sommige of alle clients de server kunnen stoppen. Zie RpcMgmtStopServerListening voor meer informatie.

U kunt de clienttoepassing ook een externe procedure-aanroep uitvoeren naar een afsluitroutine op de server. De afsluitroutine roept RpcMgmtStopServerListening en RpcServerUnregisterIf. In deze voorbeeldtoepassing voor het zelfstudieprogramma wordt deze methode gebruikt door een nieuwe externe functie, Afsluiten, toe te voegen aan het bestand Hellop.c.

In de functie Shutdown geeft de enkele null-parameter aan RpcMgmtStopServerListening aan dat de lokale toepassing moet stoppen met luisteren naar aanroepen van externe procedures. De twee null-parameters voor RpcServerUnregisterIf jokertekens zijn, waarmee wordt aangegeven dat alle interfaces niet moeten worden geregistreerd. De parameter FALSE geeft aan dat de interface onmiddellijk uit het register moet worden verwijderd, in plaats van te wachten totdat de aanroepen in behandeling zijn voltooid.

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