ZMQ套接字连接超时

时间:2018-06-17 10:36:01

标签: c++ zeromq

我正在使用C ++绑定ZMQ(cppzmq),我尝试使用.setsockopt()方法设置TCP套接字的连接超时,如下所示:

int connectTimeout = 1000;
socket.setsockopt(ZMQ_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
socket.connect(clientConfiguration.uri);

但是,在代码到达套接字上的实际.send()/.recv()之前,我什么也看不到(异常抛出?)。为了确保套接字有机会抛出我在.connect().send()方法之间进行休眠。

根据文档.zmq_connect(),只需输入READY - 状态,而不与端点建立实际连接。那么问题是我何时以及如何体验连接超时?

1 个答案:

答案 0 :(得分:3)

  

所以问题是何时以及如何我应该遇到连接超时?

何时?

好吧,实际上永远不会直接,因为这只是ZeroMQ Context() -instances'内部 F 的API曝光设置inite- S tate- M achine modus operandi(这里.setsockopt()设置所选的传输类API-OS-L3幕后的ISO-OSI-L3细节)。

如何(如果有的话)

嗯,还有一些其他 .setsockopt() 详细信息,(如果加上)可能会间接感知设置ZMQ_CONNECT_TIMEOUT连接超时的影响。这里再次,仅通过修改的FSM行为间接地,即在某种程度上,.Context() - 引擎实例将如何响应此类事件(所有纯粹内部,在API的幕后 - 这就是我们在方法上的原因使用API​​方法分离关注点,不是吗?)。

详情请参阅:

  • 有关ZMQ_IMMEDIATE
  • 的API详情
  • 有关ZMQ_RECONNECT_IVL
  • 的API详情
  • 有关ZMQ_RECONNECT_IVL_MAX的API详细信息 (API版本不断发展,请注意并非所有代理都共享相同的ZeroMQ API版本。所以最好记住Zen-of-Zero并随意重用焦虑设计师的指令{{1 }。)。

TRAILER BONUS:

  

如果不熟悉ZeroMQ仪器,人们可能会发现有用的这5秒钟阅读[ ZeroMQ hierarchy in less than a five seconds ]部分的主要概念差异,

enter image description here

courtesy Martin Sústrik, co-father of both ZeroMQ + nanomsg.尊重!)