web-dev-qa-db-ja.com

単純なRPCプログラムを実行しようとしたときにエラーが発生しました

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で同じプログラムを実行してみました。そこでは完璧に動作します。

19
arkiver

まず、ポートマッパーが機能しているかどうかを確認し、rpcinfoを使用して確認します。エラーが発生した場合は、portmapをインストールしてください

24
rekenerd

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権限が必要でした。

6
Muneeb

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の第一人者のおかげです。 「ソケットアクティベーション」効果。

4
vleo

rpcgenのインストール方法

ターミナルでこのコマンドを入力します。

Sudo apt-get install rpcbind

ただし、上記のコードでrpcgenをインストールできない場合があります。

enter image description here

その際、以下の手順で簡単にインストールできます。このステップバイステップに従う必要があります

1)Sudo apt-get update
2)Sudoapt-キャッシュ検索Apache23)Sudo apt-get install rpcbind

最後に、このコマンドを使用して確認できますrpcinfo

enter image description here

2
S.W.L.Nirmani

この問題は、「portmap」や「rpcbind」などのユーティリティが利用できないために発生します。

  • ポートマップまたはrpcbindのいずれかをインストールします。それは問題を解決します。
1
pritam

以下をインストールして試してみてください。

Sudo apt install libc-dev-bin
0
Ali