Sunucu Uygulamasını Durdurma
Sunucu uygulaması RpcMgmtStopServerListening ve RpcServerUnregisterIf'i çağırarak ya da yalnızca konak işleminden çıkarak istemcileri dinlemeyi durdurabilir. Her iki yöntem de kabul edilebilir. Sunucu ilk yaklaşımı izlerse aşağıdaki adımları uygulamalıdır:
RpcServerListensunucu işlevi, bir özel durum gerçekleşene kadar veya RpcMgmtStopServerListeningçağrısı gerçekleşene kadar çağıran programa geri dönmez. Varsayılan olarak, RpcMgmtStopServerListeningkullanarak RPC sunucusunu yalnızca başka bir sunucu iş parçacığının durdurmasına izin verilir. Sunucuyu durdurmayı deneyen istemciler RPC_S_ACCESS_DENIED hatasını alır. Ancak, RPC'yi bazı veya tüm istemcilerin sunucuyu durdurmasına izin verecek şekilde yapılandırmak mümkündür. Ayrıntılar için bkz. RpcMgmtStopServerListening.
ayrıca istemci uygulamasının sunucudaki bir kapatma yordamına uzaktan yordam çağrısı yapmasını da sağlayabilirsiniz. Kapatma yordamı, RpcMgmtStopServerListening ve RpcServerUnregisterIfçağırır. Bu öğretici örnek uygulaması, Hellop.c dosyasına yeni bir Shutdownuzaktan işlev ekleyerek bu yaklaşımı kullanır.
Shutdown işlevinde, RpcMgmtStopServerListening için tek boş parametre, yerel uygulamanın uzak yordam çağrılarını dinlemeyi durdurması gerektiğini gösterir. RpcServerUnregisterIf fonksiyonu için iki null parametre, tüm arabirimlerin kaydının kaldırılması gerektiğini belirten joker karakterlerdir. FALSE parametresi, bekleyen çağrıların tamamlanmasını beklemek yerine arabirimin hemen kayıt defterinden kaldırılması gerektiğini gösterir.
/* 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