日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

asio boost 异步错误处理_boost::asio::error的用法浅析

發布時間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asio boost 异步错误处理_boost::asio::error的用法浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

boost::asio::error的用法淺析

作者:轉載自:asio分享學習快樂更新時間:2009-8-2

一般而言我們創建用于接收error的類型大多聲明如下:

boost::system::error_code error 我們用這個類型去接受在函數中產生的錯誤

socket.connect(endpoint, error);

如果連接失敗,錯誤類型會保存到error中,比如連接主機失敗可能會返回這樣的錯誤

boost::asio::error::host_not_found;

通過if (error)檢測到error后,拋出異常

throw boost::system::system_error(error);

需要注意的是,我們的error被 轉化成 system_error了

顯示錯誤很簡單了,std::cout << e.what()

就哦啦。

大致的異常都是這個步驟進行的,

然而還有一點在異步調用的時候

產生的異常error 的傳遞是個問題,因為異步會立刻返回,局部變量是會被銷毀的,

boost::asio::placeholders::error,將會保存異常的狀態,這樣我們使用異步調用時如

socket::async_write_some的時候不用自己創建boost::system::error_co error 了,直接使用

boost::asio::placeholders::error作為參數即可,

同理,我們sync_write_some需要返回讀寫數據的大小,令人開心的是boost::asio::placeholders::bytes_transferred直接作為參數就可以保存數據大小。

實例如下:

boost::asio::async_write(socket_, boost::asio::buffer(message_),

boost::bind(&tcp_connection::handle_write, shared_from_this(),

boost::asio::placeholders::error,

boost::asio::placeholders::bytes_transferred));

}

參考手冊上說的很明確, boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred就是為異步調用使用bind的時候設計的。

當然了boost::system::error_co error還用有用的,同步調用的時候我們就用它作為參數

如:

boost::system::error_code error;

size_t len = socket.read_some(boost::asio::buffer(buf), error);

同樣在異步調用的回調handle中也用它作參數如

void handle_write(const boost::system::error_code& /*error*/,

size_t /*bytes_transferred*/)

{

}

總結就是說異步就用 boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred

同步就用boost::system::error_code

總結

以上是生活随笔為你收集整理的asio boost 异步错误处理_boost::asio::error的用法浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。