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

经过数小时的浪费时间,结果发现答案非常简单: 程序编号超出范围

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 回答