Здравствуйте, 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), работает для того чтобы, если не было никаких сообщений некоторое время, то послать сообщение проверки связи
А так ли нужны такие сложности. Может достаточно проверять просто отсутствие данных на сокете в течении определенного времени, безотносительно целое сообщение или его часть.