Hi, I am using boost:asio sync socket to upload file to server. At the end of upload, server send response back which can varying length and format. I need to read this response, considering that I haven't found a way to know how much data is available for reading, my call get blocked on some of the response. I Was wondering if there is a way to know one or more of the following. Is there condition I can pass to the read_until() call so that it read all the available response in one call? Is there a way to know that how much data remaining to be read? Is there a way that my call time out when there is no data? With three different server and response these call behave in following Manner Server1 : First call read all the data, 2nd call fail with error code EOF. Server2 :First call read all the data, 2nd call read some data, some time there are still more data to be read. Server2 :First call read all the data, 2nd call block. size_t size1 = boost::asio::read_until(*m_pSocket, response_, "\r\n", error); //process response, //Read again, size1 = boost::asio::read_until(*m_pSocket, response_, "\r\n\r\n", error); numByte = response_.in_avail(); //process response. Thanks, Akhilesh Kumar