Вам следует рассмотреть возможность использования async_read_some
вместо read_some
, поскольку это позволяет вам запускать новый фоновый таймер одновременно с чтением. Затем, чтобы создать новый таймер для каждого нового сокета, вы делаете:
boost::asio::io_service io_service;
time_t_timer timer(io_service);
timer.expires_from_now(333);
std::cout << "Starting asynchronous wait\n";
timer.async_wait(&handle_timeout);
io_service.run();
У вас будет два асинхронных вызова в фоновом режиме.
Всякий раз, когда вы получаете данные по таймеру, вы можете сбросить обратный отсчет, используя отменить и expires_from_now
, а когда истечет время таймера, вы можете закрыть сокет или предпринять какое-либо другое действие.