Corba 事件客户端 ETIMEDOUT

Posted

技术标签:

【中文标题】Corba 事件客户端 ETIMEDOUT【英文标题】:Corba Event Client ETIMEDOUT 【发布时间】:2010-12-11 19:14:06 【问题描述】:

我已经用omniOrb 和Python 构建了一个CORBA 事件服务客户端。我对 Java 客户端也有同样的问题。我很确定我正在经历与这篇文章相同的事情,因为我的 strace 看起来非常相似,但他没有具体解释他是如何修复它的:Java's 'tnameserv' takes 3+ minutes to be "Ready", why?

底线是我的客户端启动但由于双方的 ETIMEDOUT 错误而从未收到来自服务器的事件。非常感谢任何指导!

提前致谢!

编辑

不幸的是,更新 ip6tables(也不是 iptables)不起作用。

看起来我可以有一个远程调用返回数据,但是一旦 IT 想要发起响应(事件),就会导致这个问题(见下面日志的开头)

这是我的 strace 日志...

[pid 17571] futex(0xa298288, FUTEX_WAIT_PRIVATE, 1, 4, 999961668 <unfinished ...>
[pid 17568] <... poll resumed> )        = 1 ([fd=10, revents=POLLOUT])
[pid 17568] getpeername(10, sa_family=AF_INET, sin_port=htons(23120), sin_addr=inet_addr("10.10.10.250"), [16]) = 0
[pid 17568] fcntl64(10, F_SETFL, O_RDONLY) = 0
[pid 17568] getsockname(10, sa_family=AF_INET, sin_port=htons(37741), sin_addr=inet_addr("10.10.10.204"), [16]) = 0
[pid 17568] getpeername(10, sa_family=AF_INET, sin_port=htons(23120), sin_addr=inet_addr("10.10.10.250"), [16]) = 0
[pid 17568] fcntl64(10, F_SETFD, FD_CLOEXEC) = 0
[pid 17568] send(10, "GIOP\1\1\1\0035\0\0\0\2\0\0\0-\0\0\0\24\1\17\0NUP\0\0\0\24\0"..., 65, 0) = 65
[pid 17568] recv(10,  <unfinished ...>
[pid 17570] <... poll resumed> )        = 0 (Timeout)
[pid 17570] gettimeofday(1292097412, 746922, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, 0) = 0 (Timeout)
...
[pid 17570] gettimeofday(1292097412, 747503, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, 0) = 0 (Timeout)
[pid 17570] gettimeofday(1292097412, 747544, NULL) = 0
[pid 17570] gettimeofday(1292097412, 747563, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, 50 <unfinished ...>
[pid 17568] <... recv resumed> "GIOP\1\1\0\4\0\0\0\10\0\0\0\2\0\0\0\1", 8192, 0) = 20
[pid 17568] send(10, "GIOP\1\1\1\0z\0\0\0\1\0\0\0\1\0\0\0\f\0\0\0\1\0\0\0\1\0\1\0"..., 134, 0) = 134
[pid 17568] recv(10,  <unfinished ...>
[pid 17570] <... poll resumed> )        = 0 (Timeout)
[pid 17570] gettimeofday(1292097412, 797695, NULL) = 0
[pid 17570] gettimeofday(1292097412, 797716, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, 50 <unfinished ...>
[pid 17568] <... recv resumed> "GIOP\1\1\0\1\0\0\0\330\0\0\0\1\0\0\0\1\0\0\0\f\1\0\0\0\1\0\1\0"..., 8192, 0) = 228
[pid 17568] write(1, "logged on\n", 10logged on
) = 10
[pid 17568] send(10, "GIOP\1\1\1\0u\0\0\0\0\0\0\0\6\0\0\0\1\0\0\0#\0\0\0\24\1\17\0"..., 129, 0) = 129
[pid 17568] recv(10,  <unfinished ...>
[pid 17570] <... poll resumed> )        = 0 (Timeout)
[pid 17570] gettimeofday(1292097412, 847848, NULL) = 0
[pid 17570] gettimeofday(1292097412, 847868, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, 50 <unfinished ...>
[pid 17568] <... recv resumed> "GIOP\1\1\0\1\0\0\0\r\0\0\0\0\0\0\0\6\0\0\0\0\1", 8192, 0) = 25
[pid 17568] send(10, "GIOP\1\1\1\0\t\1\0\0\0\0\0\0\10\0\0\0\1\0\0\0#\0\0\0\24\1\17\0"..., 277, 0) = 277
[pid 17568] recv(10,  <unfinished ...>
[pid 17570] <... poll resumed> )        = 0 (Timeout)
[pid 17570] gettimeofday(1292097412, 898007, NULL) = 0
[pid 17570] gettimeofday(1292097412, 898028, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, 50 <unfinished ...>
[pid 17568] <... recv resumed> "GIOP\1\1\0\1\0\0\0\20\0\0\0\0\0\0\0\10\0\0\0\0\0\2I\360", 8192, 0) = 28
[pid 17568] write(1, "150000\n", 7150000
)     = 7
[pid 17568] write(1, "registered\n", 11registered
) = 11
[pid 17568] gettimeofday(1292097412, 921865, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 921888446) = 0
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097412, 921935, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 921956052) = 0
...
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097412, 923784, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 923804532) = 0
[pid 17568] futex(0xb7228f48, FUTEX_WAIT_PRIVATE, 65, 0, 581) = -1 ETIMEDOUT (Connection timed out)
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097412, 923933, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 923953643) = 0
[pid 17568] futex(0xb7228f48, FUTEX_WAIT_PRIVATE, 67, 0, 2582) = -1 ETIMEDOUT (Connection timed out)
...
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097412, 934108, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 934127651) = 0
[pid 17568] futex(0xb7228f48, FUTEX_WAIT_PRIVATE, 135, 0, 573697) = -1 ETIMEDOUT (Connection timed out)
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097412, 934800, NULL) = 0
[pid 17570] <... poll resumed> )        = 0 (Timeout)
[pid 17570] gettimeofday(1292097412, 989071, NULL) = 0
[pid 17570] gettimeofday(1292097412, 989093, NULL) = 0
[pid 17570] poll([fd=3, events=POLLIN, fd=9, events=POLLIN], 2, -1 <unfinished ...>
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 989133116) = 0
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097412, 989191, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097412, 989211757) = 0
[pid 17568] futex(0xb7228f48, FUTEX_WAIT_PRIVATE, 139, 0, 697194) = -1 ETIMEDOUT (Connection timed out)
...
[pid 17568] futex(0xb7228ed4, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 17568] gettimeofday(1292097413, 255954, NULL) = 0
[pid 17568] clock_gettime(CLOCK_REALTIME, 1292097413, 255977528) = 0
[pid 17568] futex(0xb7228f48, FUTEX_WAIT_PRIVATE, 215, 0, 26830986) = -1 ETIMEDOUT (Connection timed out)

【问题讨论】:

【参考方案1】:

我通过在防火墙脚本中添加以下行来解决此问题

 ip6tables -A INPUT -i lo -j ACCEPT

【讨论】:

您在进行更改后是否看到 ETIMEDOUT 消息?【参考方案2】:

我最终发现,由于我在与服务器不同的子网中,ORB 发布了错误的 IP 地址,并且在触发事件时无法确定返回客户端的路由。

我最终更改了 /etc/omniORB.cfg 中的配置文件并将“endPointPublish”属性的值更改为服务器子网上的 IP 地址!

【讨论】:

以上是关于Corba 事件客户端 ETIMEDOUT的主要内容,如果未能解决你的问题,请参考以下文章

Java CORBA 客户端立即断开连接

Corba 客户端 - Python 和 Corba 服务器 - Java

多线程 Corba 客户端

CORBA:服务器作为客户端

使用 CORBA - org.omg.CORBA.BAD_PARAM 连接客户端(在 VirtualBox 上)和服务器(在 localhost 上):

在运行时获取服务器上的 Corba 客户端活动