Stopping the Server Application

A server application can stop listening for clients by calling RpcMgmtStopServerListening and RpcServerUnregisterIf, or by simply exiting the host process. Both methods are acceptable. If the server follows the first approach, it should implement the following steps:

The server function RpcServerListen does not return to the calling program until an exception occurs or until a call to RpcMgmtStopServerListening occurs. By default, only another server thread is allowed to halt the RPC server by using RpcMgmtStopServerListening. Clients who try to halt the server will receive the error RPC_S_ACCESS_DENIED. However, it is possible to configure RPC to allow some or all clients to stop the server. See RpcMgmtStopServerListening for details.

You can also have the client application make a remote procedure call to a shutdown routine on the server. The shutdown routine calls RpcMgmtStopServerListening and RpcServerUnregisterIf. This tutorial example program application uses this approach by adding a new remote function, Shutdown, to the file Hellop.c.

In the Shutdown function, the single null parameter to RpcMgmtStopServerListening indicates that the local application should stop listening for remote procedure calls. The two null parameters to RpcServerUnregisterIf are wildcards, indicating that all interfaces should be unregistered. The FALSE parameter indicates that the interface should be removed from the registry immediately, rather than waiting for pending calls to complete.

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