[][src]Struct tokio::net::tcp::OwnedReadHalf

pub struct OwnedReadHalf { /* fields omitted */ }
This is supported on crate feature net only.

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. Examples import this trait through the prelude.

Implementations

impl OwnedReadHalf[src]

pub fn reunite(self, other: OwnedWriteHalf) -> Result<TcpStream, ReuniteError>[src]

This is supported on crate feature net only.

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.

pub fn poll_peek(
    &mut self,
    cx: &mut Context<'_>,
    buf: &mut [u8]
) -> Poll<Result<usize>>
[src]

This is supported on crate feature net only.

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.

See the TcpStream::poll_peek level documenation for more details.

Examples

use tokio::io;
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];

    poll_fn(|cx| {
        read_half.poll_peek(cx, &mut buf)
    }).await?;

    Ok(())
}

pub async fn peek<'_, '_>(&'_ mut self, buf: &'_ mut [u8]) -> Result<usize>[src]

This is supported on crate feature net only.

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 documenation for more details.

Examples

use tokio::net::TcpStream;
use tokio::prelude::*;
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.

Trait Implementations

impl AsRef<TcpStream> for OwnedReadHalf[src]

impl AsyncRead for OwnedReadHalf[src]

impl Debug for OwnedReadHalf[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.