Rpcgenを使用して作成した単純なRPCプログラムを実行しようとしています。その単純な階乗プログラム。これは私の最初のRPCプログラムです。 makeは正常に機能します。実行可能ファイルも作成されます。しかし、実行可能ファイルを実行しようとすると、次のエラーが発生します。
$Sudo ./fact_server
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (FACTPROGRAM, FACTVERSION, udp).
同じOS(ubuntu)の別のPCで同じプログラムを実行してみました。そこでは完璧に動作します。
まず、ポートマッパーが機能しているかどうかを確認し、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権限が必要でした。
Rpcbindの最近のLinuxリリースにはbug/featureがあります-システムの起動後にアクティブ/実行されなくなりましたが、systemctl構成rpcbindに従って何らかの形で「ソケットアクティブ化」されるはずです。/usr/lib/systemd/system /内のサービスファイル:
[Install]
Also=rpcbind.socket
Ubuntuの問題を引き起こした同じバグ/機能についてこのスレッドを確認してください( https://bugs.launchpad.net/ubuntu/+source/rpcbind/+bug/1558196 )。
rpcbindに関するあなたの(私たちの)問題への簡単な答えは-RPCサーバーコードを実行するために、doシステムのsystemctrl構成に対するこの修正:
Sudo systemctl add-wants multi-user.target rpcbind
さて、rpcbindを実行するように設定する意図された方法は、どういうわけか/var/run/rpcbind.sockにアクセスすることです。このrpcbindを実現するために、RPCサーバーアプリケーションコードが何をすべきかを教えてくれるUnix/Linuxの第一人者のおかげです。 「ソケットアクティベーション」効果。
rpcgenのインストール方法
ターミナルでこのコマンドを入力します。
Sudo apt-get install rpcbind
ただし、上記のコードでrpcgenをインストールできない場合があります。
その際、以下の手順で簡単にインストールできます。このステップバイステップに従う必要があります
1)Sudo apt-get update
2)Sudoapt-キャッシュ検索Apache23)Sudo apt-get install rpcbind
最後に、このコマンドを使用して確認できますrpcinfo
この問題は、「portmap」や「rpcbind」などのユーティリティが利用できないために発生します。
以下をインストールして試してみてください。
Sudo apt install libc-dev-bin