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
выполнять операции, и это тот момент, когда ваш обратный вызов будет вызван.