2015-04-17 20 views
4

我试图弄清楚为什么这种方式无法正常工作,我有点疯狂。我使用sunrpc,但生成的服务器代码引发以下:无法对服务器注册的远程过程调用中的参数进行编码

无法注册服务:RPC:不能编码参数
无法注册(MYRPC,MYRPC_V1,UDP)。

我不知道为什么会发生这种情况。我做以下,以生成stub:

$ 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

后的时间浪费小时事实证明,答案是如此简单:程序号超出范围

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

我的计划数0x30D0D0DFF包含一个额外的数字,F在最后导致了此值超出范围每技术规范允许用户自定义程序号码section 7.3 of RFC 1831。它应该是:

0x30D0D0DF

所以这只是我在编写XDR文件时手指细微的一种细微打印错误,但如果其他人遇到同样的问题,我会留下这个错误。确保你的程序编号是正确的!

相关问题