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
    コールバック関数:
    std::function
    

    ecは、この非同期関数にエラーがあるかどうかを示します.
    async_connect
    std::function
    

    socket.async_read_some
    最初のパラメータはboost::asio::bufferであり、bufferは既存のbufferのパッケージに対してallocの新しい空間を持たないだけである.コールバック関数:
    std::function
    

    パラメータ
    意味
    ec
    error code
    bytes
    読み出されたバイト数.このバイト数と送信されたバイト数は必ずしも等しくなく、最終的に読み終わるには複数回のコールバックが必要になる場合があります.
  • 例私が持っているbufferは10バイトしかありませんが、相手は28バイト
  • を送信しました.
    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のサイズは必ずしも等しくありません.