3
votes

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?

1
Please review how to create a minimal reproducible example and then edit your question to include it. We cannot tell what crates, types, traits, fields, etc. are present in the code. Try to produce something that reproduces your error on the Rust Playground or you can reproduce it in a brand new Cargo project. There are Rust-specific MCVE tips as well.Shepmaster
Please include the exact error message you are getting.Shepmaster
I think my questions are pretty simple for you so it is unnecessary to provide so much data. Today I am a bit in a hurry, but next time I will have more time.hedgar2017

1 Answers

4
votes

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![]);
}