4

なぜこれが機能しないのかを理解しようとして、私は少し夢中になっています。私はsunrpcを使用していますが、生成されたサーバーコードは次をスローします:

サービスを登録できません: RPC: 登録できない引数をエンコードできません
(MYRPC、MYRPC_V1、udp)。

なぜこれが起こっているのか分かりません。スタブを生成するために次のことを行っています。

$ rpcgen -NMC myrpc.x

これが私のXDRです

struct imgdata{
    opaque data<>;
};

program MYRPC {
    version MYRPC_V1 {
        imgdata minify(imgdata) = 1;
    } = 1;
} = 0x30D0D0DFF;

.x ファイルをコンパイルしてクライアント、サーバー、xdr マーシャリング コード、またはヘッダーを作成する際にエラーは発生しません。rpc インターフェースも実装しましたが、生成されたサーバー (myrpc_svr.c) を起動しようとするとエラーが発生するため、テストできませんでした。

このエラー メッセージが参照している引数は何ですか? XDR で定義された関数の実装が好きではありませんか? エンコーディング引数が原因でプログラムが登録されないのはなぜですか?

これがクライアント側のエラー メッセージではないことに、私は実際に非常に驚いています。

4

1 に答える 1

2

何時間も無駄な時間を過ごした後、答えはとても簡単であることがわかりました: The Program Number is out of range .

program MYRPC {
    version     MYRPC_V1 {
        imgdata minify(imgdata) = 1;
    } = 1;
} = 0x30D0D0DFF;

私のプログラム番号0x30D0D0DFFには余分な数字が含まれており、最後にこの値が RFC 1831 のセクション 7.3 のF仕様に従って許可されているユーザー定義のプログラム番号の範囲外になります。次のようになっているはずです。

0x30D0D0DF .

したがって、これは XDR ファイルを作成しているときに私が見つけた微妙なタイプミスにすぎませんが、他の誰かが同じ問題に遭遇した場合に備えて、これを残しておきます。プログラム番号が正しいことを確認してください。

于 2015-04-18T22:39:56.333 に答える