
Hello Vadim,
This is a piece of code from an application that inadvertently does what your application appears to be doing: receives a stream of images over a HTTP connection.
We had the same problems and you have in bold the solution we found: we call in_avail() on the read-buffer of the stream that tells us the amount of data already read but left in the buffer and then we readsome to get the actual data.
void onConnect(boost::system::error_code ErrorCode,unsigned int fps)
{
boost::asio::streambuf response;
boost::asio::read_until(*Socket, response, "\r\n");
std::istream response_stream(&response);
response_stream >> http_version;
response_stream >> status_code;
std::getline(response_stream, status_message);
if (!response_stream || http_version.substr(0, 5) != "HTTP/")
{
THROW_EXCEPTION(logic_error("Invalid HTTP response"));
}
// Read the response headers, which are terminated by a blank line.
boost::asio::read_until(*Socket, response, "\r\n\r\n");
while (std::getline(response_stream, header) && header != "\r")
{
LOG_DEBUG(log,"Got http header: "<
Good day. I'm trying to read video data transferred by HTTP. I use the following function in order to read HTTP header: [sip]