Я не уверен, правильно ли я понимаю ваш вопрос: что не так с сохранением всех связанных с клиентом состояний (сокетов, адресов и т. Д.) В классе, таком как класс сеанса, в примере asio async tcp server?Затем, например, вы можете запустить таймер при вызове операции async::write
boost::asio::async_write(socket_,
boost::asio::buffer(data_, bytes_transferred),
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
и остановить таймер в обработчике завершения записи handle_write
, который будет вызываться asio после завершения записи.
void handle_write(const boost::system::error_code& error)
Кроме того, вы можете легко использовать boost :: bind для сохранения состояния.Например, скажем, если вы вызываете асинхронную операцию записи, вы укажете обработчик, который обычно будет иметь сигнатуру, подобную handle_write
, с некоторыми дополнительными параметрами и привяжите дополнительный параметр к вызову.
Если это не отвечаетна ваш вопрос, добавьте дополнительное объяснение к вашему вопросу, чтобы кто-то мог лучше вам помочь.