pts*_*pts 5 c tcp reconnect zeromq
我刚刚在Unbutu Precise(12.04)系统上下载并安装了zeromq-4.0.5.我编译了用C编写的hello-world 客户端(REQ,connect,127.0.0.1)和server(REP,bind).
zmq_recv即使新服务器已运行一分钟,客户端中的呼叫仍然卡住.为客户端取得进展的唯一方法是将其终止(使用Ctrl- C)并重新启动它.Q1:这是预期的行为吗?我希望在几秒钟内客户端应该 知道服务器再次运行,它会自动重新连接.
Q2:我应该在示例代码中更改什么才能解决此问题?
问题3:我使用的是错误的软件版本,还是我的系统坏了?
我已禁用防火墙,sudo iptables -S打印-P INPUT ACCEPT; -P FORWARD ACCEPT; -P OUTPUT ACCEPT.
在strace -f ./hwclient输出中,我可以看到客户端在服务器关闭后connect()每秒尝试10次(默认值ZMQ_RECONNECT_IVL).在strace -f ./hwserver输出中,我可以看到重新启动的服务器accept()是连接.但是,之后通信卡住了,服务器永远不会收到来自客户端的实际请求(但是当我终止客户端时它会注意到;服务器也会收到服务器重启后启动的其他客户端的请求).
使用ipc://而不是tcp://导致相同的行为.
zmq_send如果服务器在客户端执行下一次服务器之前被杀死,则会成功进行自动重新连接zmq_send.但是,当服务器在客户端运行时被杀死zmq_recv,然后zmq_recv无限期地阻塞,并且客户端似乎无法从中恢复.
我发现这篇文章建议使用超时.但是,我认为超时不是正确的解决方案,因为TCP断开通知已经在客户端进程中可用,并且它已经在它上面作用 - 它只是不会zmq_recv将请求重新发送到新服务器 -或者至少提前返回表示错误.