Spec-Zone.ru › Tokio

Структура ReadHalf

pub struct ReadHalf<'a>(/* private fields */);
Доступно только при включённой функции crate net.

Заимствованная половина для чтения из TcpStream, созданная методом split.

Чтение из ReadHalf обычно выполняется с помощью удобных методов, предоставляемых трейтом AsyncReadExt.

Реализации

impl ReadHalf<'_>

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

Пытается получить данные из сокета, не удаляя их из очереди, и регистрирует текущую задачу для пробуждения, если данные ещё недоступны.

Обратите внимание: при нескольких вызовах poll_peek или poll_read пробуждение будет запланировано только для Waker из Context, переданного при последнем вызове.

Дополнительные сведения см. в документации метода 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 mut stream = TcpStream::connect("127.0.0.1:8000").await?;
    let (mut read_half, _) = stream.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 mut stream = TcpStream::connect("127.0.0.1:8080").await?;
    let (mut read_half, _) = stream.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.

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

Ожидает наступления любого из запрошенных состояний готовности.

Эту функцию обычно используют вместе с try_read(). Её можно использовать вместо readable(), чтобы проверить возвращённый набор состояний готовности на наличие событий Ready::READABLE и Ready::READ_CLOSED.

Функция может завершиться, даже если сокет не готов. Это ложное срабатывание, и попытка выполнить операцию вернёт io::ErrorKind::WouldBlock. Функция также может вернуть пустой набор Ready, поэтому всегда проверяйте возвращённое значение и, если запрошенные состояния не установлены, при необходимости ожидайте снова.

Эта функция эквивалентна TcpStream::ready.

Безопасность при отмене

Этот метод безопасен при отмене. После наступления события готовности метод будет сразу завершаться при каждом вызове, пока это событие не будет обработано попыткой чтения или записи, завершившейся с ошибкой WouldBlock или Poll::Pending.

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

Ожидает, пока сокет не станет доступен для чтения.

Эта функция эквивалентна ready(Interest::READABLE) и обычно используется вместе с try_read().

Эта функция также эквивалентна TcpStream::ready.

Безопасность при отмене

Этот метод безопасен при отмене. После наступления события готовности метод будет сразу завершаться при каждом вызове, пока это событие не будет обработано попыткой чтения, завершившейся с ошибкой WouldBlock или Poll::Pending.

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

Пытается прочитать данные из потока в предоставленный буфер и возвращает количество прочитанных байтов.

Получает все ожидающие данные из сокета, но не ждёт поступления новых данных. В случае успеха возвращает количество прочитанных байтов. Поскольку try_read() работает в неблокирующем режиме, буфер не требуется сохранять в асинхронной задаче, и он может полностью размещаться в стеке.

Обычно вместе с этой функцией используется readable() или ready().

Возвращаемое значение

Если данные успешно прочитаны, возвращается Ok(n), где n — количество прочитанных байтов. Если n равно 0, это может указывать на один из двух сценариев:

  1. Половина потока для чтения закрыта и больше не будет предоставлять данные.
  2. Длина указанного буфера равна 0 байт.

Если поток не готов к чтению данных, возвращается 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 try_read_buf<B: BufMut>(&self, buf: &mut B) -> Result<usize>

Доступно только при включённой возможности крейта io-util.

Пытается прочитать данные из потока в предоставленный буфер, сдвигая его внутренний курсор, и возвращает количество прочитанных байтов.

Получает все ожидающие данные из сокета, но не ждёт поступления новых данных. В случае успеха возвращает количество прочитанных байтов. Поскольку try_read_buf() работает в неблокирующем режиме, буфер не требуется сохранять в асинхронной задаче, и он может полностью размещаться в стеке.

Обычно вместе с этой функцией используется 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>

Возвращает локальный адрес, к которому привязан этот поток.

Реализации трейтов

impl AsRef<TcpStream> for ReadHalf<'_>

fn as_ref(&self) -> &TcpStream

Преобразует это значение в общую ссылку на входной тип (обычно выводимый).

impl AsyncRead for ReadHalf<'_>

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

Пытается выполнить чтение из AsyncRead в buf. Подробнее

impl<'a> Debug for ReadHalf<'a>

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

Форматирует значение с помощью заданного форматировщика. Подробнее

Автоматические реализации трейтов

impl<'a> Freeze for ReadHalf<'a>

impl<'a> RefUnwindSafe for ReadHalf<'a>

impl<'a> Send for ReadHalf<'a>

impl<'a> Sync for ReadHalf<'a>

impl<'a> Unpin for ReadHalf<'a>

impl<'a> UnsafeUnpin for ReadHalf<'a>

impl<'a> UnwindSafe for ReadHalf<'a>

Общие реализации

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

fn type_id(&self) -> TypeId

Возвращает TypeId для self. Подробнее

impl<R> AsyncReadExt for R
where R: AsyncRead + ?Sized,

fn chain<R>(self, next: R) -> Chain<Self, R>
where Self: Sized, R: AsyncRead,

Доступно только при включённой функции crate io-util.
Создаёт новый экземпляр AsyncRead, объединяющий этот поток с next. Подробнее

fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>
where Self: Unpin,

Доступно только при включённой функции crate io-util.
Извлекает из этого источника несколько байтов в указанный буфер и возвращает количество прочитанных байтов. Подробнее

fn read_buf<'a, B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>
where Self: Unpin, B: BufMut + ?Sized,

Доступно только при включённой функции crate io-util.
Извлекает из этого источника несколько байтов в указанный буфер, перемещая внутренний указатель буфера. Подробнее

fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>
where Self: Unpin,

Доступно только при включённой функции crate io-util.
Считывает ровно столько байтов, сколько требуется для заполнения buf. Подробнее

fn read_u8(&mut self) -> ReadU8<&mut Self>
where Self: Unpin,

Доступно только при включённой функции crate io-util.
Считывает из базового объекта чтения целое число без знака размером 8 бит. Подробнее

fn read_i8(&mut self) -> ReadI8<&mut Self>
where Self: Unpin,

Доступно только при включённой функции crate io-util.
Считывает из базового объекта чтения целое число со знаком размером 8 бит. Подробнее

fn read_u16(&mut self) -> ReadU16<&mut Self>
where Self: Unpin,

Доступно только при включённой функции crate io-util.
Считывает из базового объекта чтения целое число без знака размером 16 бит в порядке от старшего байта к младшему. Подробнее

fn read_i16(&mut self) -> ReadI16<&mut Self>
where Self: Unpin,

Доступно только при включённой функции crate io-util.
Считывает из базового объекта чтения целое число со знаком размером 16 бит в порядке от старшего байта к младшему. Подробнее

fn read_u32(&mut self) -> ReadU32<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает беззнаковое 32-битное целое число в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_i32(&mut self) -> ReadI32<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает знаковое 32-битное целое число в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_u64(&mut self) -> ReadU64<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает беззнаковое 64-битное целое число в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_i64(&mut self) -> ReadI64<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает знаковое 64-битное целое число в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_u128(&mut self) -> ReadU128<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает беззнаковое 128-битное целое число в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_i128(&mut self) -> ReadI128<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает знаковое 128-битное целое число в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_f32(&mut self) -> ReadF32<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает число с плавающей точкой 32-битного типа в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_f64(&mut self) -> ReadF64<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает число с плавающей точкой 64-битного типа в порядке от старшего байта к младшему из базового средства чтения. Подробнее

fn read_u16_le(&mut self) -> ReadU16Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает беззнаковое 16-битное целое число в порядке от младшего байта к старшему из базового средства чтения. Подробнее

fn read_i16_le(&mut self) -> ReadI16Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает знаковое 16-битное целое число в порядке от младшего байта к старшему из базового средства чтения. Подробнее

fn read_u32_le(&mut self) -> ReadU32Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения беззнаковое 32-битное целое число в порядке байтов от младшего к старшему. Подробнее

fn read_i32_le(&mut self) -> ReadI32Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения знаковое 32-битное целое число в порядке байтов от младшего к старшему. Подробнее

fn read_u64_le(&mut self) -> ReadU64Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения беззнаковое 64-битное целое число в порядке байтов от младшего к старшему. Подробнее

fn read_i64_le(&mut self) -> ReadI64Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения знаковое 64-битное целое число в порядке байтов от младшего к старшему. Подробнее

fn read_u128_le(&mut self) -> ReadU128Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения беззнаковое 128-битное целое число в порядке байтов от младшего к старшему. Подробнее

fn read_i128_le(&mut self) -> ReadI128Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения знаковое 128-битное целое число в порядке байтов от младшего к старшему. Подробнее

fn read_f32_le(&mut self) -> ReadF32Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения число с плавающей запятой размером 32 бита в порядке байтов от младшего к старшему. Подробнее

fn read_f64_le(&mut self) -> ReadF64Le<&mut Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает из нижележащего средства чтения число с плавающей запятой размером 64 бита в порядке байтов от младшего к старшему. Подробнее

fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>
where Self: Unpin,

Доступно только при включённой возможности crate io-util.
Читает все байты из этого источника до EOF и помещает их в buf. Подробнее

fn read_to_string<'a>( &'a mut self, dst: &'a mut String, ) -> ReadToString<'a, Self>
where Self: Unpin,

Доступно только при включённом флаге пакета io-util.
Читает все байты из этого источника до EOF и добавляет их в buf. Подробнее

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Доступно только при включённом флаге пакета io-util.
Создаёт адаптер, который считывает из него не более limit байт. Подробнее

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

fn borrow(&self) -> &T

Неизменяемо заимствует данные из принадлежащего значения. Подробнее

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

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

Изменяемо заимствует данные из принадлежащего значения. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Добавляет к этому типу указанную Span и возвращает обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Добавляет к этому типу текущую current Span и возвращает обёртку Instrumented. Подробнее

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>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/net/tcp/struct.ReadHalf.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API