
I sent 8004 bytes to server through TCP connection and successfully read it like this:
int readBytes; const int BUFFER_SIZE = 128; char charBuf[BUFFER_SIZE]; do { readBytes = socket.read_some(boost::asio::buffer(charBuf, BUFFER_SIZE)); } while(readBytes >= BUFFER_SIZE);
But sometimes this code reads just 3752 (precisely) bytes and returns. After that it handles another async_read and reads 4525 bytes (which in sum gives 8004 bytes). Do I use "read_some()" function in the right way?
This is exactly what "read_some" does -- it reads SOME data. It may read even 1 byte. If you know exactly how many bytes you expect to get, use read() free function with the appropriate completion condition: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/read.html