Search code examples
asynchronoustcprustfuturerust-tokio

How do I read_until the tokio::net::TcpStream in a future chain?


I would like to read data from the TcpStream until I encounter a '\0'. The issue is that tokio::io::read_until needs the stream to be BufRead.

fn poll(&mut self) -> Poll<(), Self::Error> {
    match self.listener.poll_accept()? {
        Async::Ready((stream, _addr)) => {
            let task = tokio::io::read_until(stream, 0, vec![0u8; buffer])
                 .map_err(|_| ...)
                 .map(|_| ...);
            tokio::spawn(task);
        }
        Async::NotReady => return Ok(Async::NotReady),
    }
}

How can I read data from the TcpStream this way?


Solution

  • Reading the documentation for BufRead, you'll see the text:

    If you have something that implements Read, you can use the BufReader type to turn it into a BufRead.

    fn example(stream: TcpStream) {
        io::read_until(std::io::BufReader::new(stream), 0, vec![]);
    }