когда вызывается обработчик для boost :: asio :: async_read_until?

Я новичок в повышении.

Я тестирую асинхронный клиент boost. справочный код приведен ниже.

5_3/doc/html/boost_asio/example/http/client/async_client.cpp" rel="nofollow">http://think-async.com /Asio/boost_asio"Connection: close"5_3/doc/html/boost_asio/example/http/client/async_client.cpp

код выполнен правильно, если существует значение заголовка "Connection: close". но обработчик "handle_read_status_line" никогда не вызывался, когда я пропустил заголовок "Conneciton: close" в HTTP-запросе. (все обработчики для получения HTTP-ответа вызываются только при закрытии TCP-соединения.)

На мой взгляд, "handle_read_status_line" следует вызывать, потому что HTTP-ответ всегда включает "\\r\\n" независимо от заголовка "Connection".

Может ли кто-нибудь объяснить мне, когда вызывается обработчик для async_read_until?

Заранее спасибо.


person user3315238    schedule 13.04.2015    source источник


Ответы (1)


Как правило, async_read_until возвращается, когда MatchCondition было выполнено.

В примере предполагается, что соединение выполняется по запросу. Это довольно ясно в том, что:

  // Start reading remaining data until EOF.
  boost::asio::async_read(socket_, response_,
      boost::asio::transfer_at_least(1),
      boost::bind(&client::handle_read_content, this,
        boost::asio::placeholders::error));
person sehe    schedule 13.04.2015
comment
М-м-м. Я понимаю вашу точку зрения по поводу async_read_until. Это вызывается для меня без Connection: close - person sehe; 13.04.2015
comment
в вашем случае HTTP-сервер может закрыть TCP-соединение после отправки HTTP-ответа ... Я добавил следующий код для трассировки в точке входа обработчика. printf (% s \ n, ФУНКЦИЯ); результат такой, как показано ниже. handle_connect handle_write_request Ошибка: asio.misc: 2 - person user3315238; 13.04.2015
comment
@ user3315238 Я не совсем понимаю, что вы там хотите сказать. Возможно, вам стоит прикрепить SSCCE - person sehe; 13.04.2015