Spec-Zone.ru › Tokio

Структура UnixStream

pub struct UnixStream { /* private fields */ }
Доступно только в Unix и при включённой функции crate net.

Структура, представляющая подключённый сокет Unix.

Этот сокет можно подключить напрямую с помощью UnixStream::connect или принять от слушателя с помощью UnixListener::accept. Кроме того, пару анонимных сокетов Unix можно создать с помощью UnixStream::pair.

Чтобы закрыть поток в направлении записи, можно вызвать метод shutdown(). Это приведёт к тому, что другой узел получит чтение длиной 0, указывающее на то, что данные больше не будут отправляться. Поток закрывается только в одном направлении.

Реализации

impl UnixStream

pub async fn connect<P>(path: P) -> Result<UnixStream>
where P: AsRef<Path>,

Подключается к сокету, заданному path.

Эта функция создаёт новый сокет Unix и подключается по указанному пути, связывая возвращаемый поток с дескриптором цикла событий по умолчанию.

Паника

Эта функция вызывает панику, если её вызывают вне среды выполнения с включённым вводом-выводом.

Среда выполнения обычно устанавливается неявно, когда эта функция вызывается из future, выполняемой средой выполнения tokio; в противном случае среду выполнения можно установить явно с помощью функции Runtime::enter.

pub async fn connect_addr(socket_addr: &SocketAddr) -> Result<UnixStream>

Подключается к сокету, заданному socket_addr.

Эта функция создаёт новый сокет Unix и подключается по указанному адресу, связывая возвращаемый поток с дескриптором цикла событий по умолчанию.

Паника

Эта функция вызывает панику, если её вызывают вне среды выполнения с включённым вводом-выводом.

Среда выполнения обычно устанавливается неявно, когда эта функция вызывается из future, выполняемой средой выполнения tokio; в противном случае среду выполнения можно установить явно с помощью функции Runtime::enter.

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

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

Эту функцию обычно используют вместе с try_read() или try_write(). Она позволяет одновременно читать и записывать данные в один и тот же сокет в одной задаче, не разделяя сокет.

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

Безопасность отмены

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

Примеры

Одновременное чтение и запись в поток в одной задаче без разделения.

use tokio::io::Interest;
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    loop {
        let ready = stream.ready(Interest::READABLE | Interest::WRITABLE).await?;

        if ready.is_readable() {
            let mut data = vec![0; 1024];
            // Try to read data, this may still fail with `WouldBlock`
            // if the readiness event is a false positive.
            match stream.try_read(&mut data) {
                Ok(n) => {
                    println!("read {} bytes", n);
                }
                Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                    continue;
                }
                Err(e) => {
                    return Err(e.into());
                }
            }

        }

        if ready.is_writable() {
            // Try to write data, this may still fail with `WouldBlock`
            // if the readiness event is a false positive.
            match stream.try_write(b"hello world") {
                Ok(n) => {
                    println!("write {} bytes", n);
                }
                Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                    continue;
                }
                Err(e) => {
                    return Err(e.into());
                }
            }
        }
    }
}

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

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

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

Безопасность отмены

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

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    let mut msg = vec![0; 1024];

    loop {
        // Wait for the socket to be readable
        stream.readable().await?;

        // Try to read data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_read(&mut msg) {
            Ok(n) => {
                msg.truncate(n);
                break;
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    println!("GOT = {:?}", msg);
    Ok(())
}

pub fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<Result<()>>

Проверяет готовность к чтению.

Если поток Unix в данный момент не готов к чтению, этот метод сохранит копию Waker из предоставленного Context. Когда поток Unix будет готов к чтению, для waker будет вызван Waker::wake.

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

Эта функция предназначена для случаев, когда создать и закрепить future с помощью readable невозможно. По возможности предпочтительно использовать readable, поскольку этот метод поддерживает опрос из нескольких задач одновременно.

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

Функция возвращает:

  • Poll::Pending, если поток Unix не готов к чтению.
  • Poll::Ready(Ok(())), если поток Unix готов к чтению.
  • Poll::Ready(Err(e)), если произошла ошибка.
Ошибки

Эта функция может столкнуться с любой стандартной ошибкой ввода-вывода, кроме WouldBlock.

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

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

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

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

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

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

  1. Читающая половина потока закрыта и больше не будет выдавать данные.
  2. Указанный буфер имеет нулевую длину.

Если поток не готов к чтению данных, возвращается Err(io::ErrorKind::WouldBlock).

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    loop {
        // Wait for the socket to be readable
        stream.readable().await?;

        // Creating the buffer **after** the `await` prevents it from
        // being stored in the async task.
        let mut buf = [0; 4096];

        // Try to read data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_read(&mut buf) {
            Ok(0) => break,
            Ok(n) => {
                println!("read {} bytes", n);
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    Ok(())
}

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).

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io::{self, IoSliceMut};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    loop {
        // Wait for the socket to be readable
        stream.readable().await?;

        // Creating the buffer **after** the `await` prevents it from
        // being stored in the async task.
        let mut buf_a = [0; 512];
        let mut buf_b = [0; 1024];
        let mut bufs = [
            IoSliceMut::new(&mut buf_a),
            IoSliceMut::new(&mut buf_b),
        ];

        // Try to read data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_read_vectored(&mut bufs) {
            Ok(0) => break,
            Ok(n) => {
                println!("read {} bytes", n);
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    Ok(())
}

pub fn try_read_buf<B: BufMut>(&self, buf: &mut B) -> Result<usize>

Доступно только при включённой функции crate io-util.

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

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

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

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

Если данные успешно прочитаны, возвращается Ok(n), где n — количество прочитанных байтов. Ok(0) означает, что читающая половина потока закрыта и больше не будет выдавать данные. Если поток не готов к чтению данных, возвращается Err(io::ErrorKind::WouldBlock).

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    loop {
        // Wait for the socket to be readable
        stream.readable().await?;

        let mut buf = Vec::with_capacity(4096);

        // Try to read data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_read_buf(&mut buf) {
            Ok(0) => break,
            Ok(n) => {
                println!("read {} bytes", n);
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    Ok(())
}

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

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

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

Безопасность отмены

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

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    loop {
        // Wait for the socket to be writable
        stream.writable().await?;

        // Try to write data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_write(b"hello world") {
            Ok(n) => {
                break;
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    Ok(())
}

pub fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<Result<()>>

Опрос готовности к записи.

Если Unix-поток в данный момент не готов к записи, этот метод сохранит копию Waker из предоставленного Context. Когда Unix-поток будет готов к записи, для waker будет вызван Waker::wake.

Обратите внимание, что при многократных вызовах poll_write_ready или poll_write пробуждение будет запланировано только для Waker из Context, переданного при последнем вызове. (Однако poll_read_ready хранит второй, независимый waker.)

Эта функция предназначена для случаев, когда невозможно создать и закрепить future с помощью writable. Если возможно, предпочтительно использовать writable, поскольку это позволяет выполнять опрос одновременно из нескольких задач.

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

Функция возвращает:

  • Poll::Pending, если Unix-поток не готов к записи.
  • Poll::Ready(Ok(())), если Unix-поток готов к записи.
  • Poll::Ready(Err(e)), если произошла ошибка.
Ошибки

Эта функция может возвращать любые стандартные ошибки ввода-вывода, кроме WouldBlock.

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

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

Функция попытается записать всё содержимое buf, однако может быть записана только часть буфера.

Эта функция обычно используется вместе с writable().

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

Если данные успешно записаны, возвращается Ok(n), где n — количество записанных байтов. Если поток не готов к записи данных, возвращается Err(io::ErrorKind::WouldBlock).

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    loop {
        // Wait for the socket to be writable
        stream.writable().await?;

        // Try to write data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_write(b"hello world") {
            Ok(n) => {
                break;
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    Ok(())
}

pub fn try_write_vectored(&self, buf: &[IoSlice<'_>]) -> Result<usize>

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

Данные записываются из каждого буфера по порядку; при этом последний буфер может быть прочитан не полностью. Этот метод эквивалентен одному вызову try_write() с объединёнными буферами.

Эта функция обычно используется вместе с writable().

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

Если данные успешно записаны, возвращается Ok(n), где n — количество записанных байтов. Если поток не готов к записи данных, возвращается Err(io::ErrorKind::WouldBlock).

Примеры
use tokio::net::UnixStream;
use std::error::Error;
use std::io;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Connect to a peer
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");
    let stream = UnixStream::connect(bind_path).await?;

    let bufs = [io::IoSlice::new(b"hello "), io::IoSlice::new(b"world")];

    loop {
        // Wait for the socket to be writable
        stream.writable().await?;

        // Try to write data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match stream.try_write_vectored(&bufs) {
            Ok(n) => {
                break;
            }
            Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                continue;
            }
            Err(e) => {
                return Err(e.into());
            }
        }
    }

    Ok(())
}

pub fn try_io<R>( &self, interest: Interest, f: impl FnOnce() -> Result<R>, ) -> Result<R>

Пытается выполнить чтение из сокета или запись в него с помощью предоставленной пользователем операции ввода-вывода.

Если сокет готов, вызывается предоставленная замыкающая функция. Она должна попытаться выполнить операцию ввода-вывода над сокетом, вручную вызвав соответствующий системный вызов. Если операция завершается с ошибкой, поскольку сокет на самом деле не готов, замыкающая функция должна вернуть ошибку WouldBlock, а флаг готовности будет сброшен. Затем try_io возвращает значение, полученное от замыкающей функции.

Если сокет не готов, замыкающая функция не вызывается и возвращается ошибка WouldBlock.

Замыкающая функция должна возвращать ошибку WouldBlock только в том случае, если она выполнила операцию ввода-вывода над сокетом, которая завершилась неудачей из-за неготовности сокета. Возврат ошибки WouldBlock в любой другой ситуации приведёт к ошибочному сбросу флага готовности, что может вызвать неправильную работу сокета.

Замыкающая функция не должна выполнять операцию ввода-вывода с помощью методов, определённых для типа Tokio UnixStream, поскольку это нарушит работу флага готовности и может вызвать неправильную работу сокета.

Этот метод не предназначен для использования с объединёнными интересами. Замыкающая функция должна выполнять только один тип операции ввода-вывода, поэтому ей не требуется более одного состояния готовности. При вызове с объединённым интересом этот метод может вызвать панику или ожидать бесконечно.

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

pub async fn async_io<R>( &self, interest: Interest, f: impl FnMut() -> Result<R>, ) -> Result<R>

Читает данные из сокета или записывает их в сокет, используя предоставленную пользователем операцию ввода-вывода.

Ожидается готовность сокета, и, когда сокет готов, вызывается предоставленное замыкание. Замыкание должно попытаться выполнить операцию ввода-вывода с сокетом, вручную вызвав соответствующий системный вызов. Если операция завершается с ошибкой, поскольку сокет фактически не готов, замыкание должно вернуть ошибку WouldBlock. В этом случае флаг готовности сбрасывается, и готовность сокета ожидается снова. Этот цикл повторяется, пока замыкание не вернёт Ok или ошибку, отличную от WouldBlock.

Замыкание должно возвращать ошибку WouldBlock только в том случае, если оно выполнило операцию ввода-вывода с сокетом, завершившуюся неудачей из-за того, что сокет не был готов. Возврат ошибки WouldBlock в любой другой ситуации приведёт к ошибочному сбросу флага готовности, из-за чего сокет может работать неправильно.

Замыкание не должно выполнять операцию ввода-вывода с помощью методов, определённых для типа Tokio UnixStream, поскольку это нарушит работу флага готовности и может привести к неправильной работе сокета.

Этот метод не предназначен для использования с объединёнными интересами. Замыкание должно выполнять только один тип операции ввода-вывода, поэтому ему не должно требоваться более одного состояния готовности. Если вызвать этот метод с объединённым интересом, он может вызвать панику или зависнуть навсегда.

pub fn from_std(stream: UnixStream) -> Result<UnixStream>

Создаёт новый UnixStream из std::os::unix::net::UnixStream.

Эта функция предназначена для обёртывания UnixStream из стандартной библиотеки в соответствующий тип Tokio.

Примечания

Вызывающий код отвечает за то, чтобы поток был переведён в неблокирующий режим. В противном случае все операции ввода-вывода с потоком будут блокировать поток выполнения, что приведёт к неожиданному поведению. Неблокирующий режим можно установить с помощью set_nonblocking.

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

Примеры
use tokio::net::UnixStream;
use std::os::unix::net::UnixStream as StdUnixStream;

let std_stream = StdUnixStream::connect("/path/to/the/socket")?;
std_stream.set_nonblocking(true)?;
let stream = UnixStream::from_std(std_stream)?;
Паника

Эта функция вызывает панику, если её вызвать не из среды выполнения с включённым вводом-выводом.

Среда выполнения обычно устанавливается неявно, если эта функция вызвана из future, выполняемой средой выполнения Tokio; в противном случае её можно установить явно с помощью функции Runtime::enter.

pub fn into_std(self) -> Result<UnixStream>

Преобразует tokio::net::UnixStream в std::os::unix::net::UnixStream.

Возвращённый std::os::unix::net::UnixStream будет переведён в неблокирующий режим, как true. При необходимости используйте set_nonblocking, чтобы изменить режим блокировки.

Примеры
use std::error::Error;
use std::io::Read;
use tokio::net::UnixListener;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let dir = tempfile::tempdir().unwrap();
    let bind_path = dir.path().join("bind_path");

    let mut data = [0u8; 12];
    let listener = UnixListener::bind(&bind_path)?;
    let (tokio_unix_stream, _) = listener.accept().await?;
    let mut std_unix_stream = tokio_unix_stream.into_std()?;
    std_unix_stream.set_nonblocking(false)?;
    std_unix_stream.read_exact(&mut data)?;
    Ok(())
}

pub fn pair() -> Result<(UnixStream, UnixStream)>

Создаёт безымянную пару соединённых сокетов.

Эта функция создаёт пару взаимосвязанных сокетов Unix для двустороннего обмена данными. Каждый сокет будет связан с дескриптором цикла обработки событий по умолчанию.

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

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

Примеры
use tokio::net::UnixStream;

let dir = tempfile::tempdir().unwrap();
let bind_path = dir.path().join("bind_path");
let stream = UnixStream::connect(bind_path).await?;

println!("{:?}", stream.local_addr()?);

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

Возвращает адрес сокета удалённой стороны этого соединения.

Примеры
use tokio::net::UnixStream;

let dir = tempfile::tempdir().unwrap();
let bind_path = dir.path().join("bind_path");
let stream = UnixStream::connect(bind_path).await?;

println!("{:?}", stream.peer_addr()?);

pub fn peer_cred(&self) -> Result<UCred>

Возвращает эффективные учётные данные процесса, вызвавшего connect или pair.

pub fn take_error(&self) -> Result<Option<Error>>

Возвращает значение параметра SO_ERROR.

pub fn split<'a>(&'a mut self) -> (ReadHalf<'a>, WriteHalf<'a>)

Разделяет UnixStream на читающую и записывающую половины, которые можно использовать для одновременного чтения из потока и записи в него.

Этот метод эффективнее, чем into_split, но половины нельзя переместить в независимо запущенные задачи.

pub fn into_split(self) -> (OwnedReadHalf, OwnedWriteHalf)

Разделяет UnixStream на читающую и записывающую половины, которые можно использовать для одновременного чтения из потока и записи в него.

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

Примечание: При удалении записывающей половины будет закрыта только записывающая сторона потока. Это эквивалентно вызову shutdown() для UnixStream.

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

impl AsFd for UnixStream

fn as_fd(&self) -> BorrowedFd<'_>

Заимствует файловый дескриптор. Подробнее

impl AsRawFd for UnixStream

fn as_raw_fd(&self) -> RawFd

Извлекает необработанный файловый дескриптор. Подробнее

impl AsRef<UnixStream> for ReadHalf<'_>

fn as_ref(&self) -> &UnixStream

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

impl AsRef<UnixStream> for WriteHalf<'_>

fn as_ref(&self) -> &UnixStream

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

impl AsRef<UnixStream> for OwnedReadHalf

fn as_ref(&self) -> &UnixStream

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

impl AsRef<UnixStream> for OwnedWriteHalf

fn as_ref(&self) -> &UnixStream

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

impl AsRef<UnixStream> for UnixStream

fn as_ref(&self) -> &Self

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

impl AsyncRead for UnixStream

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

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

impl AsyncWrite for UnixStream

fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize>>

Пытается записать байты из buf в объект. Подробнее

fn poll_write_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize>>

Аналогично poll_write, но записывает данные из среза буферов. Подробнее

fn is_write_vectored(&self) -> bool

Определяет, реализует ли этот объект записи эффективный метод poll_write_vectored. Подробнее

fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<()>>

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

fn poll_shutdown(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<()>>

Инициирует или пытается завершить работу этого объекта записи; возвращает успех, когда соединение ввода-вывода полностью закрыто. Подробнее

impl Debug for UnixStream

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

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

impl TryFrom<UnixStream> for UnixStream

fn try_from(stream: UnixStream) -> Result<Self>

Потребляет поток и возвращает объект ввода-вывода tokio.

Это эквивалентно UnixStream::from_std(stream).

type Error = Error

Тип, возвращаемый в случае ошибки преобразования.

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

impl !Freeze for UnixStream

impl RefUnwindSafe for UnixStream

impl Send for UnixStream

impl Sync for UnixStream

impl Unpin for UnixStream

impl UnsafeUnpin for UnixStream

impl UnwindSafe for UnixStream

Обобщённые реализации

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,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Доступно только при включённой функции крейта 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<W> AsyncWriteExt for W
where W: AsyncWrite + ?Sized,

fn write<'a>(&'a mut self, src: &'a [u8]) -> Write<'a, Self>
where Self: Unpin,

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

fn write_vectored<'a, 'b>( &'a mut self, bufs: &'a [IoSlice<'b>], ) -> WriteVectored<'a, 'b, Self>
where Self: Unpin,

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

fn write_buf<'a, B>(&'a mut self, src: &'a mut B) -> WriteBuf<'a, Self, B>
where Self: Sized + Unpin, B: Buf,

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

fn write_all_buf<'a, B>( &'a mut self, src: &'a mut B, ) -> WriteAllBuf<'a, Self, B>
where Self: Sized + Unpin, B: Buf,

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

fn write_all<'a>(&'a mut self, src: &'a [u8]) -> WriteAll<'a, Self>
where Self: Unpin,

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

fn write_u8(&mut self, n: u8) -> WriteU8<&mut Self>
where Self: Unpin,

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

fn write_i8(&mut self, n: i8) -> WriteI8<&mut Self>
where Self: Unpin,

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

fn write_u16(&mut self, n: u16) -> WriteU16<&mut Self>
where Self: Unpin,

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

fn write_i16(&mut self, n: i16) -> WriteI16<&mut Self>
where Self: Unpin,

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

fn write_u32(&mut self, n: u32) -> WriteU32<&mut Self>
where Self: Unpin,

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

fn write_i32(&mut self, n: i32) -> WriteI32<&mut Self>
where Self: Unpin,

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

fn write_u64(&mut self, n: u64) -> WriteU64<&mut Self>
where Self: Unpin,

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

fn write_i64(&mut self, n: i64) -> WriteI64<&mut Self>
where Self: Unpin,

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

fn write_u128(&mut self, n: u128) -> WriteU128<&mut Self>
where Self: Unpin,

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

fn write_i128(&mut self, n: i128) -> WriteI128<&mut Self>
where Self: Unpin,

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

fn write_f32(&mut self, n: f32) -> WriteF32<&mut Self>
where Self: Unpin,

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

fn write_f64(&mut self, n: f64) -> WriteF64<&mut Self>
where Self: Unpin,

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

fn write_u16_le(&mut self, n: u16) -> WriteU16Le<&mut Self>
where Self: Unpin,

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

fn write_i16_le(&mut self, n: i16) -> WriteI16Le<&mut Self>
where Self: Unpin,

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

fn write_u32_le(&mut self, n: u32) -> WriteU32Le<&mut Self>
where Self: Unpin,

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

fn write_i32_le(&mut self, n: i32) -> WriteI32Le<&mut Self>
where Self: Unpin,

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

fn write_u64_le(&mut self, n: u64) -> WriteU64Le<&mut Self>
where Self: Unpin,

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

fn write_i64_le(&mut self, n: i64) -> WriteI64Le<&mut Self>
where Self: Unpin,

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

fn write_u128_le(&mut self, n: u128) -> WriteU128Le<&mut Self>
where Self: Unpin,

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

fn write_i128_le(&mut self, n: i128) -> WriteI128Le<&mut Self>
where Self: Unpin,

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

fn write_f32_le(&mut self, n: f32) -> WriteF32Le<&mut Self>
where Self: Unpin,

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

fn write_f64_le(&mut self, n: f64) -> WriteF64Le<&mut Self>
where Self: Unpin">Unpin,

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

fn flush(&mut self) -> Flush<'_, Self>
where Self: Unpin,

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

fn shutdown(&mut self) -> Shutdown<'_, Self>
where Self: Unpin,

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

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> ⓘ

Инструментирует этот тип с помощью текущего 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/struct.UnixStream.html

Spec-Zone.ru

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