[英]In boost::asio, why are there no socket member functions for read/write?
我使用boost asio處理客戶端/服務器應用程序,特別是boost::asio::ip::tcp::socket
來連接和傳輸數據。 現在我使用boost::asio::async_read
來boost::asio::async_read
一定數量的字節。 到目前為止,在所有情況下,我都知道在調用處理程序之前我想要接收多少字節。 因此我沒有看到使用套接字read_some
函數read_some
。 但我想知道為什么沒有boost::asio::ip::tcp::socket
“async_read”成員函數,只有免費的。
所以我的問題是:是否存在概念或技術原因,為什么有一個read_some
成員函數但沒有read
成員函數,或者“Boost只是忘了實現它”?
Asio中的所有流接口都提供read_some
和async_read_some
moethods。 這適用於TCP套接字,SSL流和串行端口。 read
, read_until
及其異步兄弟的實現都基於使用read_some
方法具有相同的實現。 read
函數被寫為通用模板,可以在其第一個參數上使用read_some
方法來執行您請求的調用。
有些C ++倡導者建議盡可能使用非朋友非成員函數,以便在類實現更改時最小化更改。 read_some
是接口, read
只是一個包裝器,在各種不同源的部分讀取的情況下添加阻塞。
正如Dave S所說,你會發現這些是boost \\ boost \\ asio \\ read.hpp中的外部輔助函數
如果查看boost 1.52 asio示例 , blocking_tcp_echo_client和blocking_tcp_echo_server示例將使用write()
的阻塞形式。 該示例使用read_some()
因為它不會預先知道大小...但是寫功能完全類似於你讀的問題,也存在作為輔助write.hpp
在同一個地方作為read.hpp
。
基本上:
tcp::socket s(io_service);
char buff[LENGTH];
boost::asio::write(s, boost::asio::buffer(buff, LENGTH));
boost::asio::read(s, boost::asio::buffer(buff, LENGTH));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.