C ++:停止RPC服务

时间:2011-03-15 12:21:04

标签: c++ rpc

从我的C ++源代码开始,我正在启动一个调用svc_run()的RPC服务。一切看起来都很好,如果我在终端中输入rpcinfo -p,我可以看到我的服务正在运行。

现在我正在开发一个“清理”功能,该功能应该停止此服务并将其从rpcinfo -p列表中删除。

我该怎么做?目前我只能使用终端中的sudo rpcinfo -d program version来阻止它。我怎么能从我的源文件中做到这一点?

感谢。

4 个答案:

答案 0 :(得分:0)

过了一段时间,我发现了如何做到这一点。其实我遇到了一些意想不到的困难。执行此操作的标准方法是使用此:

svc_unregister(PROGID, VERSION)

但不知何故,它对我不起作用。经过大量试用和一些在线帮助(http://www.spinics.net/lists/linux-nfs/msg05619.html)后,我能够删除调用的RPC服务:

pmap_unset(PROGID, VERSION);

希望这会有所帮助:)

答案 1 :(得分:0)

尝试使用{{1}}功能。有关更多详细说明,请参阅rpc_svc_calls章节。

答案 2 :(得分:0)

我尝试了svc_run()的强制停止,但是没有找到解决方案,但是我让svc_run()在注册函数内停止然后停止 - 也许这可以帮到你 - 请看看这个:{ {3}}

答案 3 :(得分:0)

'最好'的解决方案是同时使用DevCpp和Danilo的解决方案:

  • 在服务器的RPC函数中,定义一个函数,当客户端调用该函数时,执行svc_exit()。这将让您的RPC服务器从svc_run()循环返回。现在,您可以扩展RPC客户端应用程序,也可以创建单独的客户端应用程序来终止服务器。
  • 在RPC服务器的主程序中,在调用svc_run()之后,执行'pmap_unset(PROGID,VERSION);'。这将让rpcbind取消注册您的RPC地址。
  • 然后对您的应用程序进行常规清理。

这种组合允许您的RPC服务器作为恶魔运行,即无需用户交互,同时仍然提供干净的退出而无需取消该过程。