Структура Client Options
pub struct ClientOptions { /* private fields */ }
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
fn clone_from(&mut self, source: &Self)
source. Подробнее
Автоматические реализации трейтов
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> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Twhere T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> ToOwned for Twhere T: Clone,
type Owned = T
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
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