我目前正在努力实现ZeroMQ XPUB / XSUB代理的正常关闭。 documentation表示仅终止ZMQ上下文会使zmq::proxy
返回。但是,在我的情况下,这会产生SIGABRT
。这是预期的行为,还是我做错了什么?
请注意,由于我使用较旧的ZMQ版本(4.0.4),因此我没有zmq_proxy_steerable
。
我的代码如下:
zmq::context_t c;
std::condition_variable cv;
std::thread t([&]() {
zmq::socket_t xsub(c, ZMQ_XSUB);
zmq::socket_t xpub(c, ZMQ_XPUB);
xsub.bind("tcp://127.0.0.1:*");
xpub.bind("tcp://127.0.0.1:*");
cv.notify_all();
zmq::proxy(xsub, xpub, NULL);
});
std::mutex m;
std::unique_lock<std::mutex> lk(m);
cv.wait(lk);
c.close();
有什么想法吗?