跳到主要内容

OwnedReadHalf

搜索

结构体 OwnedReadHalf 

源代码
pub struct OwnedReadHalf { /* 私有字段 */ }
展开描述

TcpStream 的 owned 读半部,由 into_split 创建。

OwnedReadHalf 读取通常使用 AsyncReadExt trait 上提供的便捷方法来完成。

实现§

源代码§

impl OwnedReadHalf

源代码

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

尝试将 TcpStream 的两个半部分重新合并并恢复原始套接字。仅当两个半部分源自同一调用 into_split 时才会成功。

源代码

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

尝试在套接字上接收数据,但不会从队列中移除该数据,如果数据尚不可用,则注册当前任务以进行唤醒。

请注意,在多次调用 poll_peekpoll_read 时,只有传递给最近一次调用的 Context 中的 Waker 会被调度以接收唤醒。

有关更多详细信息,请参阅 TcpStream::poll_peek 的方法级文档。

§示例
use tokio::io::{self, ReadBuf};
use tokio::net::TcpStream;

use std::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(())
}
源代码

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

在套接字上从其连接的远程地址接收数据,但不会从队列中移除该数据。成功时返回窥视到的字节数。

有关更多详细信息,请参阅 TcpStream::peek 的方法级文档。

§示例
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(())
}

read 方法定义在 AsyncReadExt trait 上。

源代码

pub async fn ready(&self, interest: Interest) -> Result<Ready>

等待任何所请求的就绪状态。

此函数通常与 try_read() 配合使用。它可以用来代替 readable(),以检查返回的就绪集中的 Ready::READABLEReady::READ_CLOSED 事件。

该函数可能在套接字尚未就绪时完成。这是一种误报,尝试进行操作将返回 io::ErrorKind::WouldBlock。该函数也可能返回空的 Ready 集合,因此应始终检查返回值,如果请求的状态未设置,可能需要再次等待。

此函数等价于 TcpStream::ready

§取消安全性

此方法可安全取消。一旦就绪事件发生,该方法将继续立即返回,直到通过尝试读取或写入而消费该就绪事件(失败时返回 WouldBlockPoll::Pending)。

源代码

pub async fn readable(&self) -> Result<()>

等待套接字变为可读。

此函数等价于 ready(Interest::READABLE),通常与 try_read() 配对使用。

此函数同样等价于 TcpStream::ready

§取消安全性

此方法可安全取消。一旦就绪事件发生,该方法将继续立即返回,直到通过尝试读取而消费该就绪事件(失败时返回 WouldBlockPoll::Pending)。

源代码

pub fn try_read(&self, buf: &mut [u8]) -> Result<usize>

尝试从流中读取数据到提供的缓冲区,返回读取的字节数。

接收套接字上任何待处理的数据,但不会等待新数据到达。成功时返回读取的字节数。由于 try_read() 是非阻塞的,缓冲区不必由异步任务存储,可以完全存在于栈上。

通常,readable()ready() 与此函数配对使用。

§返回值

如果成功读取数据,则返回 Ok(n),其中 n 是读取的字节数。如果 n0,则可能表示以下两种情况之一:

  1. The stream’s read half is closed and will no longer yield data.
  2. The specified buffer was 0 bytes in length.

如果流未准备好读取数据,则返回 Err(io::ErrorKind::WouldBlock)

源代码

pub fn try_read_vectored(&self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>

尝试从流中读取数据到提供的多个缓冲区,返回读取的字节数。

按顺序复制数据以填充每个缓冲区,最后写入的缓冲区可能只被部分填充。此方法的行为等效于使用串联缓冲区对 try_read() 进行单次调用。

接收套接字上任何待处理的数据,但不会等待新数据到达。成功时返回读取的字节数。由于 try_read_vectored() 是非阻塞的,缓冲区不必由异步任务存储,可以完全存在于栈上。

通常,readable()ready() 与此函数配对使用。

§返回值

如果成功读取数据,则返回 Ok(n),其中 n 是读取的字节数。Ok(0) 表示流的读半部分已关闭,将不再产生数据。如果流未准备好读取数据,则返回 Err(io::ErrorKind::WouldBlock)

源代码

pub fn peer_addr(&self) -> Result<SocketAddr>

返回此流连接到的远程地址。

源代码

pub fn local_addr(&self) -> Result<SocketAddr>

返回此流绑定的本地地址。

trait 实现§

源代码§

impl AsRef<TcpStream> for OwnedReadHalf

源代码§

fn as_ref(&self) -> &TcpStream

将此类型转换为输入类型的共享引用(通常自动推导)。
源代码§

impl AsyncRead for OwnedReadHalf

源代码§

fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut ReadBuf<'_>, ) -> Poll<Result<()>>

Attempts to read from the AsyncRead into buf. 更多信息
源代码§

impl Debug for OwnedReadHalf

源代码§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化器格式化此值。 更多信息

自动 trait 实现§

blanket 实现§

源代码§

impl<T> Any for T
where T: 'static + ?Sized,

源代码§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
源代码§

impl<T> Borrow<T> for T
where T: ?Sized,

源代码§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
源代码§

impl<T> BorrowMut<T> for T
where T: ?Sized,

源代码§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 更多信息
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

原样返回参数。

源代码§

impl<T, U> Into<U> for T
where U: From<T>,

源代码§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换是 From<T> for U 实现选择执行的操作。

源代码§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

源代码§

type Error = Infallible

转换出错时返回的类型。
源代码§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
源代码§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

源代码§

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

转换出错时返回的类型。
源代码§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。