c++ - Boost.Asio 中的异常处理

标签 c++ boost boost-asio

Boost.Asio 文档 suggests the following exception handling pattern :

boost::asio::io_service io_service;
...
for (;;)
{
  try
  {
    io_service.run();
    break; // run() exited normally
  }
  catch (my_exception& e)
  {
    // Deal with exception as appropriate.
  }
}

它的问题是异常的上下文在处理时丢失了。例如,如果我在给定的 io_service 中有多个套接字 session ,我不知道是哪个导致了异常。

如果不将异步处理程序的异常 包装在 try/catch block 中,处理异常的更好方法是什么?

最佳答案

Boost.Asio 推荐的模式没有错。您应该做的是将处理异常所需的所有信息与异常对象一起打包。如果你使用 boost::exception (或从它派生的类型)用于异常处理,您可以通过创建 boost::error_info 的特化来非常轻松地附加元数据(包括 session 信息)并使用 operator<< 将其附加到异常对象。然后,您的 catch block 可以使用 get_error_info 提取此信息.

关于c++ - Boost.Asio 中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066557/

相关文章:

c++ - read_some() 工作但很慢, read() 没有

c++ - 为什么 C++ 中类的大小取决于数据成员的公共(public)/私有(private)状态?

c++ - 更改 main 中变量的值以供其他函数使用 (c++)

c++ - 检查GTK窗口是否具有键盘和鼠标焦点窗口C++

linux - Boost 找不到本地安装的 icu

c++ - 使用 boost::asio::io_service run 避免繁忙循环

c++ - 使用 SWIG 将 Python 数组传递给 c++ 函数

python - 用 Boost Python 包装 C++ 函数——numpy 数组类型

c++ - 连接到 boost 命名管道

c++ - libtorrent 和 tcp::acceptor 在 Windows 上因访问冲突而崩溃