我有点疯狂试图弄清楚为什么这不起作用。我使用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中定义的函数的实现吗?为什么编码参数会导致程序甚至无法注册?
我真的很惊讶这不是客户端错误消息
答案 0 :(得分:2)
经过几个小时的浪费时间后,答案很简单:程序编号超出范围。
program MYRPC {
version MYRPC_V1 {
imgdata minify(imgdata) = 1;
} = 1;
} = 0x30D0D0DFF;
我的程序编号 0x30D0D0DFF 在末尾包含一个额外的数字 F
,导致此值超出允许的用户定义程序编号的范围section 7.3 of RFC 1831中的规范。应该是:
<强> 0x30D0D0DF 强>
所以这只是我在编写XDR文件时发现的一个微妙的错字,但是如果有其他人遇到同样的问题,我会把它留下来。确保您的程序编号正确无误!