5

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

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

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

是否需要检查 send 的返回值?是否存在 send 函数会返回 false 但不抛出异常的情况?

4

1 回答 1

3

源代码

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,并且您想要处理这种情况,您应该检查返回值。例如,您可以通过将消息排队并稍后重试来处理它。

于 2012-10-15T18:38:22.317 回答