8

Boost Asioで次のことをしたいです。ソケットがあり、ソケットでデータの読み取り/書き込みが可能になったときに呼び出されるコールバックを登録したいのですが、実際に読み取り/書き込みを行いたくありません。基本的に、必要なものはasync_read_some/async_write_someに似ていますが、実際の読み取りと書き込みは行われません。

入力パラメーターとしてソケット記述子を必要とする独自の読み取りおよび書き込み関数を備えた外部ライブラリを使用しており、このライブラリを非同期で使用したいため、これが必要です。

4

2 に答える 2

8

リアクター スタイルの操作を探しています。これらはboost::asio::null_buffers、非同期操作に提供することで取得できます。Reactor スタイルの操作は、サードパーティ ライブラリとの統合、共有メモリ プールの使用などに役立ちます。Boost.Asio のドキュメントには、いくつかの情報と次のサンプル コードが記載されています。

ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
socket.async_read_some(null_buffers(), read_handler);
...
void read_handler(boost::system::error_code ec)
{
  if (!ec)
  {
    std::vector<char> buf(socket.available());
    socket.read_some(buffer(buf));
  }
}

Boost.Asio は公式のノンブロッキングの例も提供しており、ソケットで直接読み取りおよび書き込み操作を実行するライブラリと統合する方法を示しています。

于 2013-06-28T12:38:36.747 に答える