zmq错误代码156384763的原因

时间:2015-03-11 14:25:22

标签: c++ sockets zeromq

我正在使用zmq req / rep模式通信。实现非常简单,req发送一些数据并等待recv。代表接收数据,处理并回复。

//REQ
zmq_connect
zmq_send
zmq_recv //blocking
zmq_close

//REP
zmq_bind
while(true) {
  while(data_received) {
    //miscellaneous process
    zmq_recv //non-blocking
      Print zmq_error_no if zmq_recv fails
  }
  zmq_send
}

在REP端,在zmq_recv超时期间,将打印zmq_error_no 11。但有时候我得到的错误是156384763.谁能告诉那个错误的含义?

2 个答案:

答案 0 :(得分:3)

这是本机ZeroMQ错误EFSM:

  

由于套接字未处于适当的状态,此时无法在此套接字上执行zmq_send()操作。在多个状态之间切换的套接字类型可能会发生此错误,例如ZMQ_REP。

来源:zmq_sendzmq.h

答案 1 :(得分:1)

这里是此EFSM错误的另一个受害者,该错误在从REP套接字接收时出现。

对我来说,直接原因是没有回答客户提出的一些要求。 请记住,消息传递模式严格要求您发送回复! 如果您不这样做,则服务器会变得混乱,并只能停止工作。

那么,这在实践中如何发生?

好吧,您可能发现自己正在将旧版协议移植到ZeroMQ(像我一样)。原始作者根本不想打扰某些请求的地方。 因此,一旦您遇到这样的请求,服务器就会中断。

或者假设在处理该特定问题请求时代码中发生了异常。然后,我们可能会无意间跳过我们的发送答复消息代码!