Struct tokio::net::tcp::OwnedReadHalf [−][src]
pub struct OwnedReadHalf { /* fields omitted */ }
Expand description
Owned read half of a TcpStream
, created by into_split
.
Reading from an OwnedReadHalf
is usually done using the convenience methods found
on the AsyncReadExt
trait.
Implementations
Attempts to put the two halves of a TcpStream
back together and
recover the original socket. Succeeds only if the two halves
originated from the same call to into_split
.
Attempt to receive data on the socket, without removing that data from the queue, registering the current task for wakeup if data is not yet available.
Note that on multiple calls to poll_peek
or poll_read
, only the
Waker
from the Context
passed to the most recent call is scheduled
to receive a wakeup.
See the TcpStream::poll_peek
level documentation for more details.
Examples
use tokio::io::{self, ReadBuf};
use tokio::net::TcpStream;
use futures::future::poll_fn;
#[tokio::main]
async fn main() -> io::Result<()> {
let stream = TcpStream::connect("127.0.0.1:8000").await?;
let (mut read_half, _) = stream.into_split();
let mut buf = [0; 10];
let mut buf = ReadBuf::new(&mut buf);
poll_fn(|cx| {
read_half.poll_peek(cx, &mut buf)
}).await?;
Ok(())
}
Receives data on the socket from the remote address to which it is connected, without removing that data from the queue. On success, returns the number of bytes peeked.
See the TcpStream::peek
level documentation for more details.
Examples
use tokio::net::TcpStream;
use tokio::io::AsyncReadExt;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Connect to a peer
let stream = TcpStream::connect("127.0.0.1:8080").await?;
let (mut read_half, _) = stream.into_split();
let mut b1 = [0; 10];
let mut b2 = [0; 10];
// Peek at the data
let n = read_half.peek(&mut b1).await?;
// Read the data
assert_eq!(n, read_half.read(&mut b2[..n]).await?);
assert_eq!(&b1[..n], &b2[..n]);
Ok(())
}
The read
method is defined on the AsyncReadExt
trait.