Spec-Zone.ru › Tokio

Структура NamedPipeServer

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

Сервер именованного канала Windows.

Для приёма подключений клиентов необходимо создать сервер с помощью ServerOptions::create и дождаться подключения клиентов с помощью NamedPipeServer::connect.

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

Правильно реализованный сервер выглядит так:

use std::io;
use tokio::net::windows::named_pipe::ServerOptions;

const PIPE_NAME: &str = r"\\.\pipe\named-pipe-idiomatic-server";

// The first server needs to be constructed early so that clients can
// be correctly connected. Otherwise calling .wait will cause the client to
// error.
//
// Here we also make use of `first_pipe_instance`, which will ensure that
// there are no other servers up and running already.
let mut server = ServerOptions::new()
    .first_pipe_instance(true)
    .create(PIPE_NAME)?;

// Spawn the server loop.
let server = tokio::spawn(async move {
    loop {
        // Wait for a client to connect.
        server.connect().await?;
        let connected_client = server;

        // Construct the next server to be connected before sending the one
        // we already have of onto a task. This ensures that the server
        // isn't closed (after it's done in the task) before a new one is
        // available. Otherwise the client might error with
        // `io::ErrorKind::NotFound`.
        server = ServerOptions::new().create(PIPE_NAME)?;

        let client = tokio::spawn(async move {
            /* use the connected client */
        });
    }

    Ok::<_, io::Error>(())
});

/* do something else not server related here */

Реализации

impl NamedPipeServer

pub unsafe fn from_raw_handle(handle: RawHandle) -> Result<Self>

Создаёт новый сервер именованного канала из указанного необработанного дескриптора.

Эта функция передаёт владение указанным дескриптором и возлагает ответственность за его закрытие на возвращаемый объект.

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

Ошибки

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

pub fn info(&self) -> Result<PipeInfo>

Получает сведения об именованном канале, с которым связан сервер.

use tokio::net::windows::named_pipe::{PipeEnd, PipeMode, ServerOptions};

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-info";

let server = ServerOptions::new()
    .pipe_mode(PipeMode::Message)
    .max_instances(5)
    .create(PIPE_NAME)?;

let server_info = server.info()?;

assert_eq!(server_info.end, PipeEnd::Server);
assert_eq!(server_info.mode, PipeMode::Message);
assert_eq!(server_info.max_instances, 5);

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

Позволяет процессу сервера именованного канала ожидать подключения клиентского процесса к экземпляру именованного канала. Клиентский процесс подключается, создавая именованный канал с тем же именем.

Это соответствует системному вызову ConnectNamedPipe.

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

Этот метод безопасен при отмене. Если он используется в качестве ветви в select! и первой завершается другая ветвь, события подключения не теряются.

Пример
use tokio::net::windows::named_pipe::ServerOptions;

const PIPE_NAME: &str = r"\\.\pipe\mynamedpipe";

let pipe = ServerOptions::new().create(PIPE_NAME)?;

// Wait for a client to connect.
pipe.connect().await?;

// Use the connected client...

pub fn disconnect(&self) -> Result<()>

Отключает серверную сторону экземпляра именованного канала от клиентского процесса.

use tokio::io::AsyncWriteExt;
use tokio::net::windows::named_pipe::{ClientOptions, ServerOptions};
use windows_sys::Win32::Foundation::ERROR_PIPE_NOT_CONNECTED;

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-disconnect";

let server = ServerOptions::new()
    .create(PIPE_NAME)?;

let mut client = ClientOptions::new()
    .open(PIPE_NAME)?;

// Wait for a client to become connected.
server.connect().await?;

// Forcibly disconnect the client.
server.disconnect()?;

// Write fails with an OS-specific error after client has been
// disconnected.
let e = client.write(b"ping").await.unwrap_err();
assert_eq!(e.raw_os_error(), Some(ERROR_PIPE_NOT_CONNECTED as i32));

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

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

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

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

Примеры

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

use tokio::io::Interest;
use tokio::net::windows::named_pipe;
use std::error::Error;
use std::io;

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-ready";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

    loop {
        let ready = server.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 server.try_read(&mut data) {
                Ok(n) => {
                    println!("read {} bytes", n);
                }
                Err(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 server.try_write(b"hello world") {
                Ok(n) => {
                    println!("write {} bytes", n);
                }
                Err(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().

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

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-readable";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

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

    loop {
        // Wait for the pipe to be readable
        server.readable().await?;

        // Try to read data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match server.try_read(&mut msg) {
            Ok(n) => {
                msg.truncate(n);
                break;
            }
            Err(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<()>>

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

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

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

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

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

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

  • Poll::Pending, если канал не готов к чтению.
  • Poll::Ready(Ok(())), если канал готов к чтению.
  • 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. Длина указанного буфера равна 0 байт.

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

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

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-try-read";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

    loop {
        // Wait for the pipe to be readable
        server.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 server.try_read(&mut buf) {
            Ok(0) => break,
            Ok(n) => {
                println!("read {} bytes", n);
            }
            Err(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::windows::named_pipe;
use std::error::Error;
use std::io::{self, IoSliceMut};

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-try-read-vectored";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

    loop {
        // Wait for the pipe to be readable
        server.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 server.try_read_vectored(&mut bufs) {
            Ok(0) => break,
            Ok(n) => {
                println!("read {} bytes", n);
            }
            Err(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>

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

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

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

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

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

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

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

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-client-readable";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new().create(PIPE_NAME)?;

    loop {
        // Wait for the pipe to be readable
        server.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 server.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().

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

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-writable";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

    loop {
        // Wait for the pipe to be writable
        server.writable().await?;

        // Try to write data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match server.try_write(b"hello world") {
            Ok(n) => {
                break;
            }
            Err(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<()>>

Проверяет готовность к записи.

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

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

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

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

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

  • Poll::Pending, если канал не готов к записи.
  • Poll::Ready(Ok(())), если канал готов к записи.
  • 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::windows::named_pipe;
use std::error::Error;
use std::io;

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-try-write";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

    loop {
        // Wait for the pipe to be writable
        server.writable().await?;

        // Try to write data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match server.try_write(b"hello world") {
            Ok(n) => {
                break;
            }
            Err(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::windows::named_pipe;
use std::error::Error;
use std::io;

const PIPE_NAME: &str = r"\\.\pipe\tokio-named-pipe-server-try-write-vectored";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let server = named_pipe::ServerOptions::new()
        .create(PIPE_NAME)?;

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

    loop {
        // Wait for the pipe to be writable
        server.writable().await?;

        // Try to write data, this may still fail with `WouldBlock`
        // if the readiness event is a false positive.
        match server.try_write_vectored(&bufs) {
            Ok(n) => {
                break;
            }
            Err(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 NamedPipeServer, поскольку это нарушит работу флага готовности и может привести к неправильной работе канала.

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

Обычно вместе с этой функцией используется 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 NamedPipeServer, поскольку это нарушит работу флага готовности и может привести к неправильной работе канала.

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

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

impl AsHandle for NamedPipeServer

fn as_handle(&self) -> BorrowedHandle<'_>

Доступно только на docsrs и Unix и (функции crate fs или net).
См. std::os::windows::io::AsHandle::as_handle

impl AsRawHandle for NamedPipeServer

fn as_raw_handle(&self) -> RawHandle

Доступно только на docsrs и Unix и (функции crate fs или net).
См. std::os::windows::io::AsRawHandle::as_raw_handle

impl AsyncRead for NamedPipeServer

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

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

impl AsyncWrite for NamedPipeServer

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 poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Result<()>>

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

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

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

fn is_write_vectored(&self) -> bool

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

impl Debug for NamedPipeServer

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

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

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

impl Freeze for NamedPipeServer

impl RefUnwindSafe for NamedPipeServer

impl Send for NamedPipeServer

impl Sync for NamedPipeServer

impl Unpin for NamedPipeServer

impl UnsafeUnpin for NamedPipeServer

impl UnwindSafe for NamedPipeServer

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

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,

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

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

Доступно только при включённой функции crate 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,

Доступно только при включённой возможности крейта 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,

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

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

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

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

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

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

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

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

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

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

Доступно только при включённой функции crate 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/windows/named_pipe/struct.NamedPipeServer.html

Spec-Zone.ru

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