Boost asio 1.69.0エッセイ
1827 ワード
C++のネットワーク通信
C++ベースのネットワークライブラリにはmuduo,libeventなどが少なくない.muduoは書くのが最も理解しやすいと感じて、boostの中のasioのソースコードは本当に少し複雑で、現在の主な目的はやはりasioというライブラリをどのように使うかを知っていて、boostの大部分がC++以降のバージョンの標準になる可能性があるためです.だからまず熟知してみましょう.
Asioでよく使われるタイプ boost::asio::io_context asioの基本的なすべてのclassは構造時にio_が必要ですcontextをパラメータとして使用します. boost::asio::ip::tcp::acceptor boost::asio::ip::tcp::socket同様に、上記の2つのタイプのtcpをudp に置き換えることができます. boost::asio::strand<> boost::asio::io_context::strandマルチスレッドで が順次実行されることを確認します.
一般的な関数
asioの関数の大部分は同期関数と非同期関数に分けられ,ここでは非同期関数のみを紹介する
async_accept
コールバック関数:
ecは、この非同期関数にエラーがあるかどうかを示します.
async_connect
socket.async_read_some
最初のパラメータはboost::asio::bufferであり、bufferは既存のbufferのパッケージに対してallocの新しい空間を持たないだけである.コールバック関数:
パラメータ
意味
ec
error code
bytes
読み出されたバイト数.このバイト数と送信されたバイト数は必ずしも等しくなく、最終的に読み終わるには複数回のコールバックが必要になる場合があります.例私が持っているbufferは10バイトしかありませんが、相手は28バイト を送信しました.
この場合、1つの接続のみで他のリソース占有がない場合、bytesはそれぞれ10,10,8に等しい3回コールバックされます.
socket.async_write_some
コールバック関数:
パラメータ
意味
ec
error code
bytes
送信されたバイト数.このバイト数とbufferのサイズは必ずしも等しくありません.
C++ベースのネットワークライブラリにはmuduo,libeventなどが少なくない.muduoは書くのが最も理解しやすいと感じて、boostの中のasioのソースコードは本当に少し複雑で、現在の主な目的はやはりasioというライブラリをどのように使うかを知っていて、boostの大部分がC++以降のバージョンの標準になる可能性があるためです.だからまず熟知してみましょう.
Asioでよく使われるタイプ
一般的な関数
asioの関数の大部分は同期関数と非同期関数に分けられ,ここでは非同期関数のみを紹介する
async_accept
コールバック関数:
std::function
ecは、この非同期関数にエラーがあるかどうかを示します.
async_connect
std::function
socket.async_read_some
最初のパラメータはboost::asio::bufferであり、bufferは既存のbufferのパッケージに対してallocの新しい空間を持たないだけである.コールバック関数:
std::function
パラメータ
意味
ec
error code
bytes
読み出されたバイト数.このバイト数と送信されたバイト数は必ずしも等しくなく、最終的に読み終わるには複数回のコールバックが必要になる場合があります.
std::vector input(10);
socket_.async_read_some( boost::asio::buffer(input), [](const boost::system::error_code& ec, size_t bytes){
std::cout << bytes << std::endl;
} );
この場合、1つの接続のみで他のリソース占有がない場合、bytesはそれぞれ10,10,8に等しい3回コールバックされます.
socket.async_write_some
コールバック関数:
std::function
パラメータ
意味
ec
error code
bytes
送信されたバイト数.このバイト数とbufferのサイズは必ずしも等しくありません.