ZeroMQ:检查是否有人在Unix域套接字后面监听

时间:2011-04-23 18:24:50

标签: linux ipc zeromq unix-socket

上下文:Linux(Ubuntu),C,ZeroMQ

我有一个服务器,它监听ipc:// SUB ZeroMQ套接字(物理上是一个Unix域套接字)。

我有一个应该连接到套接字的客户端,发布它的消息并断开连接。

问题:如果服务器被杀死(或以其他方式不自然地死亡),套接字文件将保持不变。如果客户端尝试连接到此陈旧套接字,则会阻止zmq_term()

如果服务器不存在,我需要阻止客户端阻止,但如果服务器处于活动状态但很忙,则需要保证交付。

假设我无法通过某些外部魔法跟踪服务器生命周期(例如,通过检查PID文件)。

任何提示?

4 个答案:

答案 0 :(得分:3)

非便携式解决方案似乎是阅读/proc/net/unix并在那里搜索套接字名称。

答案 1 :(得分:1)

没有显示你的代码,所有这些都是猜测......那说......

如果您有PUB / SUB对,PUB将会四处闲逛以确保其消息通过。也许你没有使用正确类型的zmq对。听起来更像是你有一个REP / REQ对。

这样,一旦从客户端(REQ端)连接,就可以执行zmq_poll来确定套接字是否可用于写入。如果是,则继续写入,否则关闭客户端并处理错误情况(如果系统中出错)。

答案 2 :(得分:0)

也许您可以尝试使用自己的本机套接字连接到套接字。如果连接成功,那么您的出版商很可能正常工作。

答案 3 :(得分:0)

还有另一种解决方案。不要使用ipc://套接字。而是使用像tcp://127.0.0.101:10001这样的东西。在大多数UNIX上,这几乎和IPC一样快,因为操作系统认识到它是本地连接并且快捷方式是完整的IP堆栈处理。

相关问题