繁体   English   中英

Boost.Asio中的异常处理

[英]Exception handling in Boost.Asio

Boost.Asio文档建议以下异常处理模式

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块中,处理异步处理程序的异常会有什么更好的方法?

Boost.Asio推荐的模式没有任何问题。 您应该做的是打包处理异常的任何必要信息以及异常对象。 如果你使用boost :: exception (或从它派生的类型)进行异常处理,你可以通过创建boost :: error_info的特化并使用operator <将它附加到异常对象,非常容易地附加元数据(包括会话信息)。 <。 然后,您的catch块可以使用get_error_info提取此信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM