无法在远程过程调用中编码参数以进行服务器注册

时间:2015-04-17 22:32:32

标签: c rpc xdr sunrpc

我有点疯狂试图弄清楚为什么这不起作用。我使用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中定义的函数的实现吗?为什么编码参数会导致程序甚至无法注册?

我真的很惊讶这不是客户端错误消息

1 个答案:

答案 0 :(得分:2)

经过几个小时的浪费时间后,答案很简单:程序编号超出范围

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

我的程序编号 0x30D0D0DFF 在末尾包含一个额外的数字 F ,导致此值超出允许的用户定义程序编号的范围section 7.3 of RFC 1831中的规范。应该是:

  

<强> 0x30D0D0DF

所以这只是我在编写XDR文件时发现的一个微妙的错字,但是如果有其他人遇到同样的问题,我会把它留下来。确保您的程序编号正确无误!