これが私のコードです:
void client_connection::serve()
{
asio::async_read(this->socket_, asio::buffer(&buffer_, buffer_.size()),
// predicate/condition (do I wrap this?)
std::bind(&client_connection::handle_read_predicate, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2),
// handler
this->strand_.wrap(std::bind(&client_connection::handle_read, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2)));
}
std::size_t client_connection::handle_read_predicate(const asio::error_code& error, std::size_t bytes_)
{
// useless flawed function, for now
// std::cout << "test: reached predicate, " << bytes_ << std::endl;
return 0;
}
void client_connection::handle_read(const asio::error_code& error_, std::size_t bytes_)
{
// useless flawed function, for now
if (error_) return;
this->serve();
}
私の質問は、 asio::io_service::strand を使用して述語/条件ハンドラーを同じ strand_ オブジェクトでラップするのが正しいかどうかです。ある場合はその理由、そうでない場合は説明してください。