簡體   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