Beenden der Serveranwendung

Eine Serveranwendung kann das Lauschen auf Clients beenden, indem rpcMgmtStopServerListening und RpcServerUnregisterIfaufgerufen oder der Hostprozess einfach beendet wird. Beide Methoden sind akzeptabel. Wenn der Server den ersten Ansatz verfolgt, sollte er die folgenden Schritte implementieren:

Die Serverfunktion RpcServerListen kehrt erst dann zum aufrufenden Programm zurück, wenn eine Ausnahme auftritt oder bis ein Aufruf von RpcMgmtStopServerListening erfolgt. Standardmäßig darf nur ein anderer Serverthread den RPC-Server mithilfe von RpcMgmtStopServerListening anhalten. Clients, die versuchen, den Server anzuhalten, erhalten den Fehler RPC _ S _ ACCESS _ DENIED. Es ist jedoch möglich, RPC so zu konfigurieren, dass einige oder alle Clients den Server beenden können. Weitere Informationen finden Sie unter RpcMgmtStopServerListening.

Die Clientanwendung kann auch einen Remoteprozeduraufruf an eine Routine zum Herunterfahren auf dem Server durchführen. Die Routine zum Herunterfahren ruft RpcMgmtStopServerListening und RpcServerUnregisterIfauf. In diesem Tutorial-Beispielprogramm wird dieser Ansatz verwendet, indem der Datei Hellop.c die neue Remotefunktion Herunterfahren hinzugefügt wird.

In der Shutdown-Funktion gibt der einzelne NULL-Parameter für RpcMgmtStopServerListening an, dass die lokale Anwendung das Lauschen auf Remoteprozeduraufrufe beenden soll. Die beiden NULL-Parameter für RpcServerUnregisterIf sind Platzhalter, die angeben, dass die Registrierung aller Schnittstellen aufgehoben werden soll. Der FALSE-Parameter gibt an, dass die Schnittstelle sofort aus der Registrierung entfernt werden soll, anstatt auf den Abschluss ausstehender Aufrufe zu warten.

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