是否有必要使用C ++检查0MQ中send的返回值?

时间:2012-08-27 18:03:17

标签: c++ zeromq

socket_t :: send函数示例返回一个bool来指示消息是否已成功发送,但我从未见过任何检查此返回值的示例代码。

根据0MQ C++ API C错误转换为异常:

  

底层ØMQC库函数报告的所有错误都会通过C ++语言绑定自动转换为异常。 zmq :: error_t类派生自std :: exception类,并使用zmq_strerror()函数将错误代码转换为人类可读的字符串。

是否有必要检查发送的返回值?是否有任何情况,send函数将返回false但不抛出异常?

1 个答案:

答案 0 :(得分:3)

来自source code

inline bool send (message_t &msg_, int flags_ = 0)
{
    int rc = zmq_send (ptr, &msg_, flags_);
    if (rc == 0)
        return true;
    if (rc == -1 && zmq_errno () == EAGAIN)
        return false;
    throw error_t ();
}

所以答案是 - 如果zmq_send将错误设置为EAGAIN,则send将返回false。要了解何时可能发生这种情况,请阅读zmq_socket和zmq_setsockopt的文档。

如果您使用的套接字可能会引发EAGAIN,并且您想要处理此情况,则应检查返回值。例如,您可以通过对消息进行排队并稍后再次尝试来处理它。