Asio асинхронный обработчик никогда не вызывается, другой обработчик не вызывается

У меня есть соединение 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 ответ

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

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

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

Другие вопросы по тегам