In addition to the replies above: When the connection is closed and you have reached the end of the stream, AsyncRead::read will yield Ok(0). In your example code, when bytes_read is zero, you should handle connection closure and stop looping and reading.
For some related discussion, see How to detect TCP close?