How about changing the loop to while(_connection.dataAvailableForRead) ? I doubt you'd ever block if you used that. Not sure about leastSize maxing out at 4096, that seems very unlikely. How did you measure it?