Boost.Asio中的异常处理

时间:2010-06-18 00:44:47

标签: 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中有多个套接字会话,我不知道哪个会导致异常。

在没有将try/catch块包裹起来的情况下处理异步处理程序的异常的更好方法是什么?

1 个答案:

答案 0 :(得分:14)

Boost.Asio推荐的模式没有任何问题。您应该做的是打包处理异常的任何必要信息以及异常对象。如果您使用boost::exception(或从其派生的类型)进行异常处理,则可以通过创建boost::error_info的特化并使用get_error_info将其附加到异常对象来轻松附加元数据(包括会话信息)。运营商LT;&LT ;.然后,您的catch块可以使用{{3}}提取此信息。