上下文:Linux(Ubuntu),C,ZeroMQ
我有一个服务器,它监听ipc://
SUB ZeroMQ套接字(物理上是一个Unix域套接字)。
我有一个应该连接到套接字的客户端,发布它的消息并断开连接。
问题:如果服务器被杀死(或以其他方式不自然地死亡),套接字文件将保持不变。如果客户端尝试连接到此陈旧套接字,则会阻止zmq_term()
。
如果服务器不存在,我需要阻止客户端阻止,但如果服务器处于活动状态但很忙,则需要保证交付。
假设我无法通过某些外部魔法跟踪服务器生命周期(例如,通过检查PID文件)。
任何提示?
答案 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堆栈处理。