我正在测试 0MQ 库,但我的问题可能是 IPC 通用问题(或不是)。测试非常基础,服务器绑定到套接字,客户端连接到它并发送请求。服务器回复。当客户端收到响应时,它就结束了。
如果我在后台的控制台中启动服务器,然后在同一个控制台中启动客户端,它就可以工作。如果我在不同的控制台(同一个用户)中启动客户端,它会失败,或者服务器没有收到请求,或者客户端没有收到响应,我不知道。
如果我使用命名管道 (ipc) 或套接字,这同样适用。
如果我测试 C 代码或 Python 代码,这同样适用。
我检查了防火墙,但这可能只是套接字试用的问题:
# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT udp -- 127.0.0.0/24 0.0.0.0/0 udp dpts:80:65535
ACCEPT tcp -- 127.0.0.0/24 0.0.0.0/0 tcp dpts:80:65535
ACCEPT udp -- 127.0.0.0/24 0.0.0.0/0 udp dpt:80
ACCEPT tcp -- 127.0.0.0/24 0.0.0.0/0 tcp dpt:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset
REJECT udp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 0
ACCEPT udp -- 192.168.0.0/24 0.0.0.0/0 udp dpt:631
ACCEPT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:631
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.99.0/24 !192.168.0.0/24
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
内核对于 ipc 看起来没问题:
# grep -i ipc /usr/src/linux/.config
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_IPC_NS=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_XFRM_IPCOMP=y
CONFIG_INET_IPCOMP=m
CONFIG_INET6_IPCOMP=y
# CONFIG_TIPC is not set
# CONFIG_SND_CMIPCI is not set
有关信息,我使用的代码是随 0MQ 示例提供的 flserver1 和 flclient1,也在The Guide中。
在自制应用程序的同一台 PC 上的其他地方,我成功地使用了popen,然后成功使用了fork和管道。
请问问题出在哪里?
编辑 2013-06-26 18:22 CET
如果我使用 tcp://127.0.0.1:5555 而不是 tcp://localhost:5555,它可以工作。我不明白,因为在我的 /etc/hosts 中声明了 localhost:
# grep localhost /etc/hosts
127.0.0.1 JANUS localhost
#::1 localhost
但这并不烦人,所以对我来说,套接字问题已经关闭。仍然是在我的 PC 上仍然无法运行的 ipc 传输(除非服务器和客户端都在同一个控制台中运行)。