Asio асинхронный обработчик никогда не вызывается, другой обработчик не вызывается - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть соединение asio sync.ioService находится в одном потоке (у меня только один поток.).

Меньшая проблема:

boost::asio::async_write(m_socket, boost::asio::buffer(requestStr.data(), requestStr.size()), handler);

Обработчик никогда не вызывается, но сервер получает его иответы, которые я получаю.

Большая проблема:

boost::asio::async_read_until(m_socket, sbuf, '\n', sendingHandler);

Он также не вызывает обработчик. sbuf немедленно заполняется, и я могу прочитать его там, но я не знаю положение делиминатора.Поэтому мне нужен обработчик для получения параметра bytes_transferred .(Я не собираюсь повторять буфер.)

Я попробовал несколько вещей, и я мог бы вызвать обработчик один раз, но я не помню, в чем была проблема после небольшого рефракта.Любая помощь?Спасибо!

Когда я использовал синхронизирующие сообщения, все было хорошо, но времени ожидания там нет.

РЕДАКТИРОВАТЬ: Если вы знаете какое-либо хорошее решение для поиска разделителя, мне не нужен обработчик,Потому что я бы отправил msg sync_write и прочитал async.

1 Ответ

0 голосов
/ 28 ноября 2018

Это не будет вызвано, потому что это async .Асинхронные методы записи и чтения никогда не вызывают обработчики из того места, где они называются:

Независимо от того, завершается ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции.Вызов обработчика будет выполнен способом, эквивалентным использованию boost :: asio :: io_service :: post ().

Вам необходимо вручную вызывать методы io_service, такие как run или run_onceвыполнять операции, и в этот момент будет вызван ваш обратный вызов.

...