linux - 为什么 RPC 调用在从 Linux 上的 Groovy 调用的 C 程序中失败?

标签 linux groovy rpc sunrpc

我们有一个用 C 编写的程序,它使用 RPC 与同一台 Linux 服务器上的另一个程序(也是用 C 编写的)通信(在某些生产设置中,第二个 C 程序将在另一台机器上,因此 RPC 而不是IPC)。

当从其他 C 程序、CRON 或命令行调用时,它按预期工作并且已经这样做了很多年,所以可以肯定地说它通常工作。

从 Groovy 脚本调用的同一程序失败,显然是网络问题。

在C程序中,svc_register(xprt, prognum, versnum, dispatch, protocol)成功,但是随后

  • 请求后在 RPC 服务器上:clnttcp_create 失败并显示“连接被拒绝”
  • 在等待回复的 RPC 客户端上:svc_fdset 上的selectEBADF 而失败

Groovy 程序(只是为了完整性,这里没有太多可看的):

[ "myprogram", "someoption", "someprogram" ].execute()

我们可以尝试查明和解决问题的哪些方面?

最佳答案

显然,从 Groovy 调用基于 RPC 的 C 程序确实有效。

问题可以缩小到“(int)sysconf (_SC_OPEN_MAX)”的问题,它用于确定 svc_fdset(用于从 rpc-requests 获得回复的结构)中的 fds 数量,以防万一被从 Groovy 调用的 C 程序使用。

关于linux - 为什么 RPC 调用在从 Linux 上的 Groovy 调用的 C 程序中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585091/

相关文章:

linux - kworker线程的起源

java - org.xml.sax.SAXParseException : Premature end of file

grails - Grails Web Flow的第一状态

java - 在 Java 世界中创建新的 RPC/web 服务的最佳方法?

linux - 是否可以在 vim 中为 'specific symbol' 提供用户定义的颜色?

c++ - 如何阻止时间在 Linux 上倒退?

linux - 我需要 linux 中的所有名称服务器 (DNS)

shell - jenkinsfile 中意外标记 `(' 附近出现语法错误

c++ - 注释 Protocol Buffer 中的推送 rpc 调用

R 到 R 通信