Здравствуйте!
Изучаю 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: Перенесено из 'Средства разработки'