Re[3]: [boost::asio]прерывание async_read обработчиком тайме
От: Vinick Россия  
Дата: 20.05.09 08:58
Оценка:
Здравствуйте, kvser, Вы писали:

K>Здравствуйте, Vinick, Вы писали:


K>>>Необходимо при отсутствии данных в течение некоторого времени записать в socket тестовую посылку. Может быть следующая последовательность событий:

K>>>1) прочитали часть посылки
K>>>2) сработал таймер ???

K>Вы хотите сказать что, если началось чтение, то хандлер таймера не вызовется пока не заполниться весь буфер? но это же не так


Я хочу сказать что при использовании async_read и при условии что размер буфера точно равен размеру сообщения, нет понятий "началось чтение" и "принята часть сообщения". В этом случае для приложения чтение происходит мгновенно в момент вызова readHandler,все остальное скрыто в библиотеке.
Если таймер сбрасывать и снова взводить в readHandler, то можно отследить таймаут между приемом двух сообщений.
Если async_read заменить async_read_some (в этом случае придется самостоятельно буферизовать и разделять сообщения),и перед вызовом async_wait устанавливать какой-нибудь флаг, в readHandler этот флаг сбрасывать, а в timerHandler проверять состояние флага, то можно детектировать отсутствие данных на сокете в течении определенного времени.


K>неее, за это отвечает другой таймер, назовем его t2

K>а про таймер который я говорю(назовем его t3), работает для того чтобы, если не было никаких сообщений некоторое время, то послать сообщение проверки связи

А так ли нужны такие сложности. Может достаточно проверять просто отсутствие данных на сокете в течении определенного времени, безотносительно целое сообщение или его часть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.