async_read_some возврат

Есть ли способ в Boost::ASIO узнать, не вернется ли async_read_some в определенный период времени для вызова функции без закрытия сокета? Обычно async_read_some() не возвращается, если больше нет данных для передачи в буфер.

 _socket->async_read_some(
     boost::asio::buffer(this->reply, sizeof(this>reply)),
     boost::bind(
         &TCP_IP_Connection::dataProcess,
         this,
         boost::asio::placeholders::error,
         boost::asio::placeholders::bytes_transferred
     )
 );

person Jishnu U Nair    schedule 13.03.2013    source источник
comment
Это можно сделать с помощью таймера. Возможно, стоит потратить время на чтение официальных примеров Boost.Asio, предоставленных здесь и здесь, чтобы лучше понять подход.   -  person Tanner Sansbury    schedule 13.03.2013
comment
Спасибо, но я не хочу закрывать соединение.   -  person Jishnu U Nair    schedule 13.03.2013
comment
Тогда не звонить socket::close()? Подход приведен в примере.   -  person Tanner Sansbury    schedule 13.03.2013
comment
Не могли бы вы немного лучше объяснить, что вас здесь беспокоит и что вы пытаетесь сделать?   -  person Bob Bryan    schedule 13.03.2013
comment
Это часть клиентской программы TCP. Я пытаюсь прочитать ответ на команду с сервера. Когда все данные из потока прочитаны, блоки async_read_some() до тех пор, пока не появятся данные для передачи в буфер. Поэтому я хочу убедиться, что во время этого состояния блокировки сервер каким-то образом все еще подключен. Согласно более ранним комментариям, я читаю примеры из Boost о тайм-ауте.   -  person Jishnu U Nair    schedule 13.03.2013
comment
@JishnuUNair async_read_some не блокируется, как следует из названия, он асинхронный. Кроме того, документация четко заявляет, что он возвращается немедленно. Ваш вопрос не ясен, пожалуйста, отредактируйте его и уточните. Возможно, размещение еще одного псевдокода может помочь?   -  person Sam Miller    schedule 14.03.2013


Ответы (1)


async_read_some всегда возвращается немедленно.

Если вы говорите об обработчике (обратном вызове), если вы закрываете сокет до его возврата, то я думаю, что обработчик вызывается с asio::error::operation_aborted. Если вы справитесь с этим сценарием, возможно, вам не нужно беспокоиться о том, подключены вы или нет.

person Peter Tseng    schedule 06.12.2016