pub struct NamedPipeClient { /* private fields */ }Available on crate feature
fs and Windows only.Expand description
A Windows named pipe client.
Constructed using ClientOptions::open.
Connecting a client correctly involves a few steps. When connecting through
ClientOptions::open, it might error indicating one of two things:
std::io::ErrorKind::NotFound- There is no server available.ERROR_PIPE_BUSY- There is a server available, but it is busy. Sleep for a while and try again.
So a correctly implemented client looks like this:
use std::time::Duration;
use compio_fs::named_pipe::ClientOptions;
use compio_runtime::time;
use windows_sys::Win32::Foundation::ERROR_PIPE_BUSY;
const PIPE_NAME: &str = r"\\.\pipe\named-pipe-idiomatic-client";
let client = loop {
match ClientOptions::new().open(PIPE_NAME).await {
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 clientImplementations§
Source§impl NamedPipeClient
impl NamedPipeClient
Sourcepub fn info(&self) -> Result<PipeInfo, Error>
pub fn info(&self) -> Result<PipeInfo, Error>
Retrieves information about the named pipe the client is associated with.
use compio_fs::named_pipe::{ClientOptions, PipeEnd, PipeMode};
const PIPE_NAME: &str = r"\\.\pipe\compio-named-pipe-client-info";
let client = ClientOptions::new().open(PIPE_NAME).await?;
let client_info = client.info()?;
assert_eq!(client_info.end, PipeEnd::Client);
assert_eq!(client_info.mode, PipeMode::Message);
assert_eq!(client_info.max_instances, 5);Trait Implementations§
Source§impl AsHandle for NamedPipeClient
impl AsHandle for NamedPipeClient
Source§fn as_handle(&self) -> BorrowedHandle<'_>
fn as_handle(&self) -> BorrowedHandle<'_>
Borrows the handle. Read more
Source§impl AsRawFd for NamedPipeClient
impl AsRawFd for NamedPipeClient
Source§impl AsRawHandle for NamedPipeClient
impl AsRawHandle for NamedPipeClient
Source§impl AsyncRead for &NamedPipeClient
impl AsyncRead for &NamedPipeClient
Source§impl AsyncRead for NamedPipeClient
impl AsyncRead for NamedPipeClient
Source§impl AsyncReadManaged for &NamedPipeClient
impl AsyncReadManaged for &NamedPipeClient
Source§type Buffer<'a> = BorrowedBuffer<'a>
type Buffer<'a> = BorrowedBuffer<'a>
Filled buffer type
Source§type BufferPool = BufferPool
type BufferPool = BufferPool
Buffer pool type
Source§async fn read_managed<'a>(
&mut self,
buffer_pool: &'a <&NamedPipeClient as AsyncReadManaged>::BufferPool,
len: usize,
) -> Result<<&NamedPipeClient as AsyncReadManaged>::Buffer<'a>, Error>
async fn read_managed<'a>( &mut self, buffer_pool: &'a <&NamedPipeClient as AsyncReadManaged>::BufferPool, len: usize, ) -> Result<<&NamedPipeClient as AsyncReadManaged>::Buffer<'a>, Error>
Source§impl AsyncReadManaged for NamedPipeClient
impl AsyncReadManaged for NamedPipeClient
Source§type Buffer<'a> = BorrowedBuffer<'a>
type Buffer<'a> = BorrowedBuffer<'a>
Filled buffer type
Source§type BufferPool = BufferPool
type BufferPool = BufferPool
Buffer pool type
Source§async fn read_managed<'a>(
&mut self,
buffer_pool: &'a <NamedPipeClient as AsyncReadManaged>::BufferPool,
len: usize,
) -> Result<<NamedPipeClient as AsyncReadManaged>::Buffer<'a>, Error>
async fn read_managed<'a>( &mut self, buffer_pool: &'a <NamedPipeClient as AsyncReadManaged>::BufferPool, len: usize, ) -> Result<<NamedPipeClient as AsyncReadManaged>::Buffer<'a>, Error>
Source§impl AsyncWrite for &NamedPipeClient
impl AsyncWrite for &NamedPipeClient
Source§async fn flush(&mut self) -> Result<(), Error>
async fn flush(&mut self) -> Result<(), Error>
Attempts to flush the object, ensuring that any buffered data reach
their destination.
Source§async fn shutdown(&mut self) -> Result<(), Error>
async fn shutdown(&mut self) -> Result<(), Error>
Initiates or attempts to shut down this writer, returning success when
the I/O connection has completely shut down.
Source§async fn write_vectored<T>(&mut self, buf: T) -> BufResult<usize, T>where
T: IoVectoredBuf,
async fn write_vectored<T>(&mut self, buf: T) -> BufResult<usize, T>where
T: IoVectoredBuf,
Like
write, except that it write bytes from a buffer implements
IoVectoredBuf into the source. Read moreSource§impl AsyncWrite for NamedPipeClient
impl AsyncWrite for NamedPipeClient
Source§async fn flush(&mut self) -> Result<(), Error>
async fn flush(&mut self) -> Result<(), Error>
Attempts to flush the object, ensuring that any buffered data reach
their destination.
Source§async fn shutdown(&mut self) -> Result<(), Error>
async fn shutdown(&mut self) -> Result<(), Error>
Initiates or attempts to shut down this writer, returning success when
the I/O connection has completely shut down.
Source§async fn write_vectored<T>(&mut self, buf: T) -> BufResult<usize, T>where
T: IoVectoredBuf,
async fn write_vectored<T>(&mut self, buf: T) -> BufResult<usize, T>where
T: IoVectoredBuf,
Like
write, except that it write bytes from a buffer implements
IoVectoredBuf into the source. Read moreSource§impl Clone for NamedPipeClient
impl Clone for NamedPipeClient
Source§fn clone(&self) -> NamedPipeClient
fn clone(&self) -> NamedPipeClient
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for NamedPipeClient
impl Debug for NamedPipeClient
Source§impl FromRawHandle for NamedPipeClient
impl FromRawHandle for NamedPipeClient
Source§unsafe fn from_raw_handle(handle: *mut c_void) -> NamedPipeClient
unsafe fn from_raw_handle(handle: *mut c_void) -> NamedPipeClient
Constructs a new I/O object from the specified raw handle. Read more
Source§impl Splittable for &NamedPipeClient
impl Splittable for &NamedPipeClient
Source§type ReadHalf = NamedPipeClient
type ReadHalf = NamedPipeClient
The type of the read half, which normally implements
AsyncRead or
AsyncReadAt.Source§type WriteHalf = NamedPipeClient
type WriteHalf = NamedPipeClient
The type of the write half, which normally implements
AsyncWrite or
AsyncWriteAt.Source§fn split(self) -> (NamedPipeClient, NamedPipeClient)
fn split(self) -> (NamedPipeClient, NamedPipeClient)
Consumes
self and returns a tuple containing separate read and write
halves. Read moreSource§impl Splittable for NamedPipeClient
impl Splittable for NamedPipeClient
Source§type ReadHalf = NamedPipeClient
type ReadHalf = NamedPipeClient
The type of the read half, which normally implements
AsyncRead or
AsyncReadAt.Source§type WriteHalf = NamedPipeClient
type WriteHalf = NamedPipeClient
The type of the write half, which normally implements
AsyncWrite or
AsyncWriteAt.Source§fn split(self) -> (NamedPipeClient, NamedPipeClient)
fn split(self) -> (NamedPipeClient, NamedPipeClient)
Consumes
self and returns a tuple containing separate read and write
halves. Read moreReturn a cloned
SharedFd.Auto Trait Implementations§
impl Freeze for NamedPipeClient
impl RefUnwindSafe for NamedPipeClient
impl Send for NamedPipeClient
impl Sync for NamedPipeClient
impl Unpin for NamedPipeClient
impl UnwindSafe for NamedPipeClient
Blanket Implementations§
Source§impl<A> AsyncReadExt for A
impl<A> AsyncReadExt for A
Source§async fn append<T>(&mut self, buf: T) -> BufResult<usize, T>where
T: IoBufMut,
async fn append<T>(&mut self, buf: T) -> BufResult<usize, T>where
T: IoBufMut,
Same as
AsyncRead::read, but it appends data to the end of the
buffer; in other words, it read to the beginning of the uninitialized
area.Source§async fn read_exact<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoBufMut,
async fn read_exact<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoBufMut,
Read the exact number of bytes required to fill the buf.
Source§async fn read_to_string(&mut self, buf: String) -> BufResult<usize, String>
async fn read_to_string(&mut self, buf: String) -> BufResult<usize, String>
Read all bytes as
String until underlying reader reaches EOF.Source§async fn read_to_end<A>(
&mut self,
buf: Vec<u8, A>,
) -> BufResult<usize, Vec<u8, A>>where
A: Allocator + 'static,
async fn read_to_end<A>(
&mut self,
buf: Vec<u8, A>,
) -> BufResult<usize, Vec<u8, A>>where
A: Allocator + 'static,
Read all bytes until underlying reader reaches
EOF.Source§async fn read_vectored_exact<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoVectoredBufMut,
async fn read_vectored_exact<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoVectoredBufMut,
Read the exact number of bytes required to fill the vectored buf.
Source§fn take(self, limit: u64) -> Take<Self>where
Self: Sized,
fn take(self, limit: u64) -> Take<Self>where
Self: Sized,
Creates an adaptor which reads at most
limit bytes from it. Read moreSource§async fn read_u8(&mut self) -> Result<u8, Error>
async fn read_u8(&mut self) -> Result<u8, Error>
Read a big endian
u8 from the underlying reader.Source§async fn read_u8_le(&mut self) -> Result<u8, Error>
async fn read_u8_le(&mut self) -> Result<u8, Error>
Read a little endian
u8 from the underlying reader.Source§async fn read_u16(&mut self) -> Result<u16, Error>
async fn read_u16(&mut self) -> Result<u16, Error>
Read a big endian
u16 from the underlying reader.Source§async fn read_u16_le(&mut self) -> Result<u16, Error>
async fn read_u16_le(&mut self) -> Result<u16, Error>
Read a little endian
u16 from the underlying reader.Source§async fn read_u32(&mut self) -> Result<u32, Error>
async fn read_u32(&mut self) -> Result<u32, Error>
Read a big endian
u32 from the underlying reader.Source§async fn read_u32_le(&mut self) -> Result<u32, Error>
async fn read_u32_le(&mut self) -> Result<u32, Error>
Read a little endian
u32 from the underlying reader.Source§async fn read_u64(&mut self) -> Result<u64, Error>
async fn read_u64(&mut self) -> Result<u64, Error>
Read a big endian
u64 from the underlying reader.Source§async fn read_u64_le(&mut self) -> Result<u64, Error>
async fn read_u64_le(&mut self) -> Result<u64, Error>
Read a little endian
u64 from the underlying reader.Source§async fn read_u128(&mut self) -> Result<u128, Error>
async fn read_u128(&mut self) -> Result<u128, Error>
Read a big endian
u128 from the underlying reader.Source§async fn read_u128_le(&mut self) -> Result<u128, Error>
async fn read_u128_le(&mut self) -> Result<u128, Error>
Read a little endian
u128 from the underlying reader.Source§async fn read_i8(&mut self) -> Result<i8, Error>
async fn read_i8(&mut self) -> Result<i8, Error>
Read a big endian
i8 from the underlying reader.Source§async fn read_i8_le(&mut self) -> Result<i8, Error>
async fn read_i8_le(&mut self) -> Result<i8, Error>
Read a little endian
i8 from the underlying reader.Source§async fn read_i16(&mut self) -> Result<i16, Error>
async fn read_i16(&mut self) -> Result<i16, Error>
Read a big endian
i16 from the underlying reader.Source§async fn read_i16_le(&mut self) -> Result<i16, Error>
async fn read_i16_le(&mut self) -> Result<i16, Error>
Read a little endian
i16 from the underlying reader.Source§async fn read_i32(&mut self) -> Result<i32, Error>
async fn read_i32(&mut self) -> Result<i32, Error>
Read a big endian
i32 from the underlying reader.Source§async fn read_i32_le(&mut self) -> Result<i32, Error>
async fn read_i32_le(&mut self) -> Result<i32, Error>
Read a little endian
i32 from the underlying reader.Source§async fn read_i64(&mut self) -> Result<i64, Error>
async fn read_i64(&mut self) -> Result<i64, Error>
Read a big endian
i64 from the underlying reader.Source§async fn read_i64_le(&mut self) -> Result<i64, Error>
async fn read_i64_le(&mut self) -> Result<i64, Error>
Read a little endian
i64 from the underlying reader.Source§async fn read_i128(&mut self) -> Result<i128, Error>
async fn read_i128(&mut self) -> Result<i128, Error>
Read a big endian
i128 from the underlying reader.Source§async fn read_i128_le(&mut self) -> Result<i128, Error>
async fn read_i128_le(&mut self) -> Result<i128, Error>
Read a little endian
i128 from the underlying reader.Source§async fn read_f32(&mut self) -> Result<f32, Error>
async fn read_f32(&mut self) -> Result<f32, Error>
Read a big endian
f32 from the underlying reader.Source§async fn read_f32_le(&mut self) -> Result<f32, Error>
async fn read_f32_le(&mut self) -> Result<f32, Error>
Read a little endian
f32 from the underlying reader.Source§impl<A> AsyncWriteExt for Awhere
A: AsyncWrite + ?Sized,
impl<A> AsyncWriteExt for Awhere
A: AsyncWrite + ?Sized,
Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Creates a “by reference” adaptor for this instance of
AsyncWrite. Read moreSource§async fn write_all<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoBuf,
async fn write_all<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoBuf,
Write the entire contents of a buffer into this writer.
Source§async fn write_vectored_all<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoVectoredBuf,
async fn write_vectored_all<T>(&mut self, buf: T) -> BufResult<(), T>where
T: IoVectoredBuf,
Write the entire contents of a buffer into this writer. Like
AsyncWrite::write_vectored, except that it tries to write the entire
contents of the buffer into this writer.Source§async fn write_u8(&mut self, num: u8) -> Result<(), Error>
async fn write_u8(&mut self, num: u8) -> Result<(), Error>
Write a big endian
u8 into the underlying writer.Source§async fn write_u8_le(&mut self, num: u8) -> Result<(), Error>
async fn write_u8_le(&mut self, num: u8) -> Result<(), Error>
Write a little endian
u8 into the underlying writer.Source§async fn write_u16(&mut self, num: u16) -> Result<(), Error>
async fn write_u16(&mut self, num: u16) -> Result<(), Error>
Write a big endian
u16 into the underlying writer.Source§async fn write_u16_le(&mut self, num: u16) -> Result<(), Error>
async fn write_u16_le(&mut self, num: u16) -> Result<(), Error>
Write a little endian
u16 into the underlying writer.Source§async fn write_u32(&mut self, num: u32) -> Result<(), Error>
async fn write_u32(&mut self, num: u32) -> Result<(), Error>
Write a big endian
u32 into the underlying writer.Source§async fn write_u32_le(&mut self, num: u32) -> Result<(), Error>
async fn write_u32_le(&mut self, num: u32) -> Result<(), Error>
Write a little endian
u32 into the underlying writer.Source§async fn write_u64(&mut self, num: u64) -> Result<(), Error>
async fn write_u64(&mut self, num: u64) -> Result<(), Error>
Write a big endian
u64 into the underlying writer.Source§async fn write_u64_le(&mut self, num: u64) -> Result<(), Error>
async fn write_u64_le(&mut self, num: u64) -> Result<(), Error>
Write a little endian
u64 into the underlying writer.Source§async fn write_u128(&mut self, num: u128) -> Result<(), Error>
async fn write_u128(&mut self, num: u128) -> Result<(), Error>
Write a big endian
u128 into the underlying writer.Source§async fn write_u128_le(&mut self, num: u128) -> Result<(), Error>
async fn write_u128_le(&mut self, num: u128) -> Result<(), Error>
Write a little endian
u128 into the underlying writer.Source§async fn write_i8(&mut self, num: i8) -> Result<(), Error>
async fn write_i8(&mut self, num: i8) -> Result<(), Error>
Write a big endian
i8 into the underlying writer.Source§async fn write_i8_le(&mut self, num: i8) -> Result<(), Error>
async fn write_i8_le(&mut self, num: i8) -> Result<(), Error>
Write a little endian
i8 into the underlying writer.Source§async fn write_i16(&mut self, num: i16) -> Result<(), Error>
async fn write_i16(&mut self, num: i16) -> Result<(), Error>
Write a big endian
i16 into the underlying writer.Source§async fn write_i16_le(&mut self, num: i16) -> Result<(), Error>
async fn write_i16_le(&mut self, num: i16) -> Result<(), Error>
Write a little endian
i16 into the underlying writer.Source§async fn write_i32(&mut self, num: i32) -> Result<(), Error>
async fn write_i32(&mut self, num: i32) -> Result<(), Error>
Write a big endian
i32 into the underlying writer.Source§async fn write_i32_le(&mut self, num: i32) -> Result<(), Error>
async fn write_i32_le(&mut self, num: i32) -> Result<(), Error>
Write a little endian
i32 into the underlying writer.Source§async fn write_i64(&mut self, num: i64) -> Result<(), Error>
async fn write_i64(&mut self, num: i64) -> Result<(), Error>
Write a big endian
i64 into the underlying writer.Source§async fn write_i64_le(&mut self, num: i64) -> Result<(), Error>
async fn write_i64_le(&mut self, num: i64) -> Result<(), Error>
Write a little endian
i64 into the underlying writer.Source§async fn write_i128(&mut self, num: i128) -> Result<(), Error>
async fn write_i128(&mut self, num: i128) -> Result<(), Error>
Write a big endian
i128 into the underlying writer.Source§async fn write_i128_le(&mut self, num: i128) -> Result<(), Error>
async fn write_i128_le(&mut self, num: i128) -> Result<(), Error>
Write a little endian
i128 into the underlying writer.Source§async fn write_f32(&mut self, num: f32) -> Result<(), Error>
async fn write_f32(&mut self, num: f32) -> Result<(), Error>
Write a big endian
f32 into the underlying writer.Source§async fn write_f32_le(&mut self, num: f32) -> Result<(), Error>
async fn write_f32_le(&mut self, num: f32) -> Result<(), Error>
Write a little endian
f32 into the underlying writer.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more