问题描述
我正在尝试运行一个使用rpcgen创建的简单RPC程序。它是一个简单的析因程序。这是我的第一个RPC程序。使make正常工作,并创建可执行文件。但是,当尝试运行可执行文件时,出现此错误:
$sudo ./fact_server
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (FACTPROGRAM, FACTVERSION, udp).
我尝试在具有相同操作系统(ubuntu)的另一台PC上运行相同程序。它在那里完美运行。
最佳办法
首先,您检查portmapper是否正常工作,请使用rpcinfo
进行检查。如果出现任何错误,请安装portmap
次佳办法
使用rpcinfo
检查服务是否正在运行。这就是我得到的。
$ rpcinfo
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4 local /run/rpcbind.sock portmapper superuser
100000 3 local /run/rpcbind.sock portmapper superuser
24 5 udp 0.0.0.0.3.99 - superuser
24 5 tcp 0.0.0.0.3.100 - superuser
如果该服务未运行,则必须使用rpcbind
来启动它。在Ubuntu上,我需要root特权才能运行该服务。
第三种办法
在Linux的最新版本rpcbind中存在一个错误/功能-在系统启动后,它现在不处于活动/运行状态,但是根据/usr /lib /systemd /system /中的systemctl配置rpcbind.service文件,它应该以某种方式成为”socket activated”:
[Install]
Also=rpcbind.socket
在导致Ubuntu问题(https://bugs.launchpad.net/ubuntu/+source/rpcbind/+bug/1558196)的相同错误/功能上检查此线程。
rpcbind对您(我们)问题的简短回答是-为了运行RPC服务器代码,请对系统的systemctrl配置进行以下修改:
sudo systemctl add-wants multi-user.target rpcbind
现在,设置rpcbind运行的预期方法是以某种方式访问/var/run/rpcbind.sock,我要归功于一些Unix /Linux专家,这些人可能会启发我实现该rpcbind的RPC服务器应用程序代码应该做什么。 “socket activation”效果。