21

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

4

7 に答える 7

27

最初に、ポートマッパーが機能しているかどうかを確認し、使用rpcinfoして確認します。エラーが出たらインストールportmap

于 2012-05-04T19:55:08.267 に答える
7

Check whether the service is running using rpcinfo. Here's what I get.

$ 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

If the service is not running, you have to start it with rpcbind. On Ubuntu I needed root privileges to run the service.

于 2012-05-04T19:58:42.120 に答える
4

rpcbind の最近の Linux リリースにはバグ/機能があります。現在、システムの起動後にアクティブ/実行されていませんが、/usr/lib/systemd/system/ の systemctl 構成 rpcbind.service ファイルに従って、何らかの方法で「ソケットをアクティブ化」する必要があります。 :

[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 に何らかの方法でアクセスすることです。この rpcbind を実現するために RPC サーバー アプリケーション コードが何をすべきかを教えてくれるかもしれない Unix/Linux の第一人者のおかげです。 「ソケット活性化」効果。

于 2016-10-05T12:19:50.100 に答える
2

この問題は、portmapまたはのようなユーティリティが利用できないために発生しますrpcbind。どちらかをインストールして問題を解決してください。

于 2012-05-18T02:07:21.000 に答える