From 5396c7692b87587dc35c07b2c6239782efd20739 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Tue, 7 Feb 2017 14:10:43 +0000 Subject: Do not expect a new line, rather buffer up the response in IPC --- test/RPCSession.cpp | 32 ++++++++++++++------------------ test/RPCSession.h | 5 +++-- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/test/RPCSession.cpp b/test/RPCSession.cpp index 791d2cfe..8d18d118 100644 --- a/test/RPCSession.cpp +++ b/test/RPCSession.cpp @@ -18,6 +18,7 @@ */ /** @file RPCSession.cpp * @author Dimtiry Khokhlov + * @author Alex Beregszaszi * @date 2016 */ @@ -91,18 +92,17 @@ string IPCSocket::sendRequest(string const& _req) if (!fSuccess) BOOST_FAIL("WriteFile to pipe failed"); - DWORD cbRead; - TCHAR chBuf[c_buffsize]; + DWORD cbRead; // Read from the pipe. fSuccess = ReadFile( - m_socket, // pipe handle - chBuf, // buffer to receive reply - c_buffsize,// size of buffer - &cbRead, // number of bytes read - NULL); // not overlapped + m_socket, // pipe handle + m_readBuf, // buffer to receive reply + sizeof(m_readBuf), // size of buffer + &cbRead, // number of bytes read + NULL); // not overlapped - returnStr += chBuf; + returnStr += m_readBuf; if (!fSuccess) BOOST_FAIL("ReadFile from pipe failed"); @@ -112,16 +112,12 @@ string IPCSocket::sendRequest(string const& _req) if (send(m_socket, _req.c_str(), _req.length(), 0) != (ssize_t)_req.length()) BOOST_FAIL("Writing on IPC failed"); - char c; - string response; - while (recv(m_socket, &c, 1, 0) == 1) - { - if (c != '\n') - response += c; - else - break; - } - return response; + ssize_t ret = recv(m_socket, m_readBuf, sizeof(m_readBuf), 0); + + if (ret < 0) + BOOST_FAIL("Reading on IPC failed"); + + return string(m_readBuf, m_readBuf + ret); #endif } diff --git a/test/RPCSession.h b/test/RPCSession.h index 5369e1e2..f1aee6a8 100644 --- a/test/RPCSession.h +++ b/test/RPCSession.h @@ -35,7 +35,6 @@ #include #if defined(_WIN32) -const int c_buffsize = 5120000; //because windows pipe is broken and wont work as in examples. use larger buffer limit to receive whole package in one call class IPCSocket : public boost::noncopyable { public: @@ -47,7 +46,8 @@ public: private: std::string m_path; - HANDLE m_socket; + HANDLE m_socket; + TCHAR m_readBuf[512000]; }; #else class IPCSocket: public boost::noncopyable @@ -62,6 +62,7 @@ public: private: std::string m_path; int m_socket; + char m_readBuf[512000]; }; #endif -- cgit