Я пытаюсь интегрировать связь ZMQ в тестовый пример, но у меня возникают проблемы с zmq::socket_t::recv
, по существу блокирующим на неопределенный срок, даже несмотря на то, что для операции установлен тайм-аут 500 мс. Минимальный тестовый пример, демонстрирующий поведение, выглядит следующим образом:
#include <gtest/gtest.h>
#include <zmq.hpp>
TEST(timeout, not_working_in_recv)
{
zmq::context_t zmq_context;
zmq::socket_t sub(zmq_context, ZMQ_SUB);
sub.setsockopt(ZMQ_SUBSCRIBE, nullptr, 0);
int const timeout_ms = 500;
sub.setsockopt(ZMQ_RCVTIMEO, &timeout_ms);
sub.connect("inproc://pubsub_test");
zmq::message_t msg;
sub.recv(&msg);
}
Были более сложные настройки, в которых я настраивал поток, который создает соответствующего издателя, но результатом всегда был блокирующий прием. Блок не является неопределенным, в конце концов он действительно возвращает.
![enter image description here](https://i.stack.imgur.com/1STcU.png)
Это скомпилировано и выполнено в Windows 10, x32 с использованием MSV C 2017 и ZMQ 4.2.2.
Кто-нибудь знает, почему приемный вызов блокируется и как это можно исправить?