Spec-Zone.ru › Tokio

Структура ClientOptions

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

Конструктор для создания именованных каналов и работы с ними на стороне клиента.

См. ClientOptions::open.

Реализации

impl ClientOptions

pub fn new() -> Self

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

use tokio::net::windows::named_pipe::{ServerOptions, ClientOptions};

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

// Server must be created in order for the client creation to succeed.
let server = ServerOptions::new().create(PIPE_NAME)?;
let client = ClientOptions::new().open(PIPE_NAME)?;

pub fn read(&mut self, allowed: bool) -> &mut Self

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

Соответствует установке GENERIC_READ при вызове CreateFile.

pub fn write(&mut self, allowed: bool) -> &mut Self

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

Соответствует установке GENERIC_WRITE при вызове CreateFile.

pub fn security_qos_flags(&mut self, flags: u32) -> &mut Self

Устанавливает флаги QoS, объединяемые с другими флагами и атрибутами при вызове CreateFile.

По умолчанию security_qos_flags установлен в значение SECURITY_IDENTIFICATION; вызов этой функции полностью переопределит это значение указанным аргументом.

Если security_qos_flags не установлен, вредоносная программа может получить повышенные привилегии привилегированного процесса Rust, если тот позволяет открывать пути, указанные пользователем, обманом заставив его открыть именованный канал. Поэтому можно утверждать, что security_qos_flags также следует устанавливать при открытии произвольных путей. Однако тогда биты могут конфликтовать с другими флагами, в частности с FILE_FLAG_OPEN_NO_RECALL.

Сведения о возможных значениях см. в разделе Уровни олицетворения на сайте Windows Dev Center. При использовании этого метода флаг SECURITY_SQOS_PRESENT устанавливается автоматически.

pub fn pipe_mode(&mut self, pipe_mode: PipeMode) -> &mut Self

Режим канала.

По умолчанию используется режим канала PipeMode::Byte. Описание каждого режима см. в документации к PipeMode.

pub fn open(&self, addr: impl AsRef<OsStr>) -> Result<NamedPipeClient>

Открывает именованный канал, указанный в addr.

Клиент открывается с помощью CreateFile с параметром dwCreationDisposition, установленным в OPEN_EXISTING.

Ошибки

Метод завершается ошибкой, если вызван вне среды выполнения Tokio, в среде выполнения, где не включён ввод-вывод, или если произошла какая-либо ошибка ввода-вывода, специфичная для ОС.

При создании именованного канала на стороне клиента необходимо учитывать несколько ошибок:

  • std::io::ErrorKind::NotFound — означает, что именованный канал не существует. Предположительно, сервер не запущен.
  • ERROR_PIPE_BUSY — эта ошибка возникает, когда именованный канал существует, но сервер в данный момент не ожидает подключения. Примеры проверки этой ошибки приведены ниже.

Цикл подключения, ожидающий доступности канала, выглядит так:

use std::time::Duration;
use tokio::net::windows::named_pipe::ClientOptions;
use tokio::time;
use windows_sys::Win32::Foundation::ERROR_PIPE_BUSY;

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

let client = loop {
    match ClientOptions::new().open(PIPE_NAME) {
        Ok(client) => break client,
        Err(e) if e.raw_os_error() == Some(ERROR_PIPE_BUSY as i32) => (),
        Err(e) => return Err(e),
    }

    time::sleep(Duration::from_millis(50)).await;
};

// use the connected client.

pub unsafe fn open_with_security_attributes_raw( &self, addr: impl AsRef<OsStr>, attrs: *mut c_void, ) -> Result<NamedPipeClient>

Открывает именованный канал, указанный в addr.

Этот метод аналогичен open, но позволяет передать указатель на структуру SECURITY_ATTRIBUTES, который будет передан в качестве аргумента lpSecurityAttributes функции CreateFile.

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

Аргумент attrs должен быть либо нулевым, либо указывать на допустимый экземпляр структуры SECURITY_ATTRIBUTES. Если аргумент нулевой, поведение будет идентично вызову метода open.

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

impl Clone for ClientOptions

fn clone(&self) -> ClientOptions

Возвращает копию значения. Подробнее
1.0.0 (const: unstable) ·

fn clone_from(&mut self, source: &Self)

Выполняет присваивание копированием из source. Подробнее

impl Debug for ClientOptions

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

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

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

impl Freeze for ClientOptions

impl RefUnwindSafe for ClientOptions

impl Send for ClientOptions

impl Sync for ClientOptions

impl Unpin for ClientOptions

impl UnsafeUnpin for ClientOptions

impl UnwindSafe for ClientOptions

Реализации для всех типов

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

fn type_id(&self) -> TypeId

Получает TypeId self. Подробнее

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> CloneToUninit for T
where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬Это экспериментальный API, доступный только в nightly. (clone_to_uninit)
Выполняет присваивание копированием из self в dest. Подробнее

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> ToOwned for T
where T: Clone,

type Owned = T

Тип, получаемый после перехода во владение.

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

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.ClientOptions.html

Spec-Zone.ru

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