diff --git a/util/ddv_socket.cpp b/util/ddv_socket.cpp index 08bfda65..72ed286e 100644 --- a/util/ddv_socket.cpp +++ b/util/ddv_socket.cpp @@ -211,12 +211,14 @@ int DDV::Socket::iread(void * buffer, int len){ /// \return True if new data arrived, false otherwise. bool DDV::Socket::read(std::string & buffer){ char cbuffer[5000]; - int num = iread(cbuffer, 5000); + if (!read(cbuffer, 1)){return false;} + int num = iread(cbuffer+1, 4999); if (num > 0){ - buffer.append(cbuffer, num); - return true; + buffer.append(cbuffer, num+1); + }else{ + buffer.append(cbuffer, 1); } - return false; + return true; }//read /// Create a new base ServerSocket. The socket is never connected, and a placeholder for later connections. diff --git a/util/http_parser.cpp b/util/http_parser.cpp index 60d370e7..8c9ed2db 100644 --- a/util/http_parser.cpp +++ b/util/http_parser.cpp @@ -134,20 +134,8 @@ bool HTTP::Parser::Read(DDV::Socket & sock){ int r = 0; int b = 0; char buffer[500]; - while (true){ - r = sock.ready(); - if (r < 1){ - if (r == -1){ - #if DEBUG >= 1 - fprintf(stderr, "User socket is disconnected.\n"); - #endif - } - return parse(); - } - b = sock.iread(buffer, 500); - HTTPbuffer.append(buffer, b); - } - return false; + sock.read(HTTPbuffer); + return parse(); }//HTTPReader::ReadSocket /// Reads a full set of HTTP responses/requests from file F.