diff --git a/AddressBook.cpp b/AddressBook.cpp index cd97ae27..6290aa8c 100644 --- a/AddressBook.cpp +++ b/AddressBook.cpp @@ -462,17 +462,18 @@ namespace client { if (bytes_transferred) response.write ((char *)buf, bytes_transferred); - else - { - if (ecode != boost::asio::error::timed_out || !stream->IsOpen ()) - end = true; - } + if (ecode == boost::asio::error::timed_out || !stream->IsOpen ()) + end = true; newDataReceived.notify_all (); }, 30); // wait for 30 seconds std::unique_lock l(newDataReceivedMutex); newDataReceived.wait (l); } + // process remaining buffer + while (size_t len = stream->ReadSome (buf, 4096)) + response.write ((char *)buf, len); + // parse response std::string version; response >> version; // HTTP version diff --git a/Streaming.h b/Streaming.h index ed5a9ba7..b2015f08 100644 --- a/Streaming.h +++ b/Streaming.h @@ -100,7 +100,8 @@ namespace stream template void AsyncReceive (const Buffer& buffer, ReceiveHandler handler, int timeout = 0); - + size_t ReadSome (uint8_t * buf, size_t len) { return ConcatenatePackets (buf, len); }; + void Close (); void Cancel () { m_ReceiveTimer.cancel (); }; @@ -225,7 +226,7 @@ namespace stream else // socket closed handler (m_IsReset ? boost::asio::error::make_error_code (boost::asio::error::connection_reset) : - boost::asio::error::make_error_code (boost::asio::error::operation_aborted), 0); + boost::asio::error::make_error_code (boost::asio::error::operation_aborted), received); } else // timeout expired