有必要用C++检查发送0MQ的返回值吗
Is it neccessary to check the return value of send in 0MQ with C++?
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,并且您希望处理这种情况,则应该检查返回值。例如,您可以通过对消息进行排队并稍后重试来处理它。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- 有必要用C++检查发送0MQ的返回值吗