socket_t :: send函数示例返回一个bool来指示消息是否已成功发送,但我从未见过任何检查此返回值的示例代码。
根据0MQ C++ API C错误转换为异常:
底层ØMQC库函数报告的所有错误都会通过C ++语言绑定自动转换为异常。 zmq :: error_t类派生自std :: exception类,并使用zmq_strerror()函数将错误代码转换为人类可读的字符串。
是否有必要检查发送的返回值?是否有任何情况,send函数将返回false但不抛出异常?
答案 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,并且您想要处理此情况,则应检查返回值。例如,您可以通过对消息进行排队并稍后再次尝试来处理它。