[boost::asio]прерывание async_read обработчиком таймера
От: kvser  
Дата: 18.05.09 12:43
Оценка:
Здравствуйте!

Изучаю boost::asio.
Пример (все async операции для одного io_service.run):


void timerHandler(const boost::system::error_code& error)
{
  if (!error)
  {
    //запись в socket
  }
}

void readHandler(const boost::system::error_code& e, std::size_t bytes_transferred)
{
  if (!e)
  {
    //прочитали данные размером длины буфера, выполняем к примеру запись ответа
  }
}

//ожидаем таймер
timer.async_wait(timerHandler);
...
boost::asio::async_read(socket,    boost::asio::buffer(buffer), readHandler); // читаем пока буфер не заполниться


Необходимо при отсутствии данных в течение некоторого времени записать в socket тестовую посылку. Может быть следующая последовательность событий:
1) прочитали часть посылки
2) сработал таймер ???
Каким образом можно избежать данной последовательности?
Данная последовательность не должна появляться, потому как после чтения чего-либо из socket, таймер должен остановиться и после получения всей посылки запуститься.

Думаю что надо использовать вариант async_read для чтения с условием, а в обработчике проверки условия после первого байта останавливать таймер, а после последнего запускать

19.05.09 08:06: Перенесено из 'Средства разработки'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.