有必要用C++检查发送0MQ的返回值吗

Is it neccessary to check the return value of send in 0MQ with C++?

本文关键字:0MQ 返回值 检查 C++      更新时间:2023-10-16

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

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

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

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

来自源代码:

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_setsockpt的文档。

如果您正在使用的套接字可能引发EAGAIN,并且您希望处理这种情况,则应该检查返回值。例如,您可以通过对消息进行排队并稍后重试来处理它。