用户上的ZMQ接收不遵守设置的超时时间

问题描述 投票:0回答:1

我正在尝试将ZMQ通信集成到测试用例中,但是即使我为操作设置了500ms的超时时间,zmq::socket_t::recv还是存在无限期阻塞的问题。表现出行为的最小测试用例看起来像这样

#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, "");
  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

这是使用MSVC 2017和ZMQ 4.2.2在Windows 10,x32下编译和执行的。

有人知道为什么接收呼叫被阻塞以及如何解决?

c++ zeromq
1个回答
0
投票
sub.setsockopt(ZMQ_RCVTIMEO, &timeout_ms); // set timeout to address of timeout_ms variable

应该是

sub.setsockopt(ZMQ_RCVTIMEO, timeout_ms); // set timeout to value of timeout_ms 
© www.soinside.com 2019 - 2024. All rights reserved.