From 05213d6f1d8e946e717dee948bd14b6ef3876827 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 9 May 2020 18:12:28 +0200 Subject: Improve socket read handling --- plugins/fcgi/socket.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'plugins/fcgi/socket.cpp') diff --git a/plugins/fcgi/socket.cpp b/plugins/fcgi/socket.cpp index 228964c..5402cfb 100644 --- a/plugins/fcgi/socket.cpp +++ b/plugins/fcgi/socket.cpp @@ -106,7 +106,17 @@ size_t TCPSocket::write(const std::vector& data) size_t TCPSocket::read(std::vector& data) { try { - return m_socket.read_some(boost::asio::buffer(data)); + size_t result{0}; + + while (m_socket.available()) { + std::vector inbuf_part(1024); + size_t got { m_socket.read_some(boost::asio::buffer(inbuf_part))}; + data.insert(data.end(), inbuf_part.begin(), inbuf_part.begin() + got); + result += got; + } + + return result; + } catch (const boost::system::system_error& ex) { if (ex.code() == boost::asio::error::eof) { throw fcgi_eof_error("EOF on read"); @@ -165,7 +175,16 @@ size_t FileSocket::write(const std::vector& data) size_t FileSocket::read(std::vector& data) { try { - return m_socket.read_some(boost::asio::buffer(data)); + size_t result{0}; + + while (m_socket.available()) { + std::vector inbuf_part(1024); + size_t got { m_socket.read_some(boost::asio::buffer(inbuf_part))}; + data.insert(data.end(), inbuf_part.begin(), inbuf_part.begin() + got); + result += got; + } + + return result; } catch (const boost::system::system_error& ex) { if (ex.code() == boost::asio::error::eof) { throw fcgi_eof_error("EOF on read"); -- cgit v1.2.3