You're going about it the wrong way. The readBufferSize property controls the internal (read) buffer of the QTcpSocket. You don't need to touch it at all. Just read whatever is you want to read directly from the socket. If you want to make your life easier you can also make use of QDataStream and its transactions (assuming you're talking to a Qt application on the other side).
control socket states like: free (buffer size is NULL), busy (buffer size is not NULL) and readyForReading (buffer is full, it emits signal itself)
This makes no sense at all. Qt will asynchronously populate the socket object's buffer, so it's never "busy" or "free".