pub struct Channel(/* private fields */);
Expand description
An object representing a Zircon channel.
As essentially a subtype of Handle
, it can be freely interconverted.
Implementations§
Source§impl Channel
impl Channel
Sourcepub fn create() -> (Channel, Channel)
pub fn create() -> (Channel, Channel)
Create a channel, resulting in a pair of Channel
objects representing both
sides of the channel. Messages written into one may be read from the opposite.
Wraps the zx_channel_create syscall.
§Panics
If the process’ job policy denies channel creation or the kernel reports no memory available to create a new channel.
Sourcepub fn read_uninit<'b, 'h>(
&self,
bytes: &'b mut [MaybeUninit<u8>],
handles: &'h mut [MaybeUninit<Handle>],
) -> ChannelReadResult<(&'b mut [u8], &'h mut [Handle])>
pub fn read_uninit<'b, 'h>( &self, bytes: &'b mut [MaybeUninit<u8>], handles: &'h mut [MaybeUninit<Handle>], ) -> ChannelReadResult<(&'b mut [u8], &'h mut [Handle])>
Read a message from a channel. Wraps the zx_channel_read syscall. Care should be taken to avoid handle leaks by either transferring the returned handles out to another type or dropping them explicitly.
Sourcepub unsafe fn read_raw(
&self,
bytes: *mut u8,
bytes_len: usize,
handles: *mut Handle,
handles_len: usize,
) -> ChannelReadResult<(usize, usize)>
pub unsafe fn read_raw( &self, bytes: *mut u8, bytes_len: usize, handles: *mut Handle, handles_len: usize, ) -> ChannelReadResult<(usize, usize)>
Read a message from a channel. Wraps the zx_channel_read syscall.
§Safety
bytes
must be valid to write to for bytes_len
bytes. handles
must be valid to write
to for handles_len
elements.
Sourcepub fn read(&self, buf: &mut MessageBuf) -> Result<(), Status>
pub fn read(&self, buf: &mut MessageBuf) -> Result<(), Status>
Read a message from a channel.
Note that this method can cause internal reallocations in the MessageBuf
if it is lacks capacity to hold the full message. If such reallocations
are not desirable, use read_raw
instead.
Sourcepub fn read_split(
&self,
bytes: &mut Vec<u8>,
handles: &mut Vec<Handle>,
) -> Result<(), Status>
pub fn read_split( &self, bytes: &mut Vec<u8>, handles: &mut Vec<Handle>, ) -> Result<(), Status>
Read a message from a channel into a separate byte vector and handle vector.
If the provided handles
has any elements, they will be dropped before reading from the
channel.
Note that this method can cause internal reallocations in the Vec
s
if they lacks capacity to hold the full message. If such reallocations
are not desirable, use read_uninit
instead.
Sourcepub fn read_etc_uninit<'b, 'h>(
&self,
bytes: &'b mut [MaybeUninit<u8>],
handles: &'h mut [MaybeUninit<HandleInfo>],
) -> ChannelReadResult<(&'b mut [u8], &'h mut [HandleInfo])>
pub fn read_etc_uninit<'b, 'h>( &self, bytes: &'b mut [MaybeUninit<u8>], handles: &'h mut [MaybeUninit<HandleInfo>], ) -> ChannelReadResult<(&'b mut [u8], &'h mut [HandleInfo])>
Read a message from a channel. Care should be taken to avoid handle leaks by either transferring the returned handles out to another type or dropping them explicitly.
This differs from read_uninit
, in that it uses extended handle info.
Wraps the zx_channel_read syscall.
Sourcepub unsafe fn read_etc_raw(
&self,
bytes: *mut u8,
bytes_len: usize,
handles: *mut HandleInfo,
handles_len: usize,
) -> ChannelReadResult<(usize, usize)>
pub unsafe fn read_etc_raw( &self, bytes: *mut u8, bytes_len: usize, handles: *mut HandleInfo, handles_len: usize, ) -> ChannelReadResult<(usize, usize)>
Read a message from a channel. Wraps the zx_channel_read_etc syscall.
This differs from read_raw
in that it returns extended information on
the handles.
On success, returns the number of bytes and handles read.
§Safety
bytes
must be valid to write to for bytes_len
bytes.
handles
must be valid to write to for handles_len
elements.
Sourcepub fn read_etc(&self, buf: &mut MessageBufEtc) -> Result<(), Status>
pub fn read_etc(&self, buf: &mut MessageBufEtc) -> Result<(), Status>
Read a message from a channel.
This differs from read
in that it returns extended information on
the handles.
Note that this method can cause internal reallocations in the MessageBufEtc
if it is lacks capacity to hold the full message. If such reallocations
are not desirable, use read_etc_uninit
or read_etc_raw
instead.
Sourcepub fn read_etc_split(
&self,
bytes: &mut Vec<u8>,
handles: &mut Vec<HandleInfo>,
) -> Result<(), Status>
pub fn read_etc_split( &self, bytes: &mut Vec<u8>, handles: &mut Vec<HandleInfo>, ) -> Result<(), Status>
Read a message from a channel into a separate byte vector and handle vector.
This differs from read_split
in that it returns extended information on
the handles.
Note that this method can cause internal reallocations in the Vec
s
if they lacks capacity to hold the full message. If such reallocations
are not desirable, use read_etc_uninit
or read_etc_raw
instead.
Sourcepub fn write(&self, bytes: &[u8], handles: &mut [Handle]) -> Result<(), Status>
pub fn write(&self, bytes: &[u8], handles: &mut [Handle]) -> Result<(), Status>
Write a message to a channel. Wraps the zx_channel_write syscall.
On return, the elements pointed to by handles
will have been zeroed to reflect
the fact that the handles have been transferred.
Sourcepub fn writev(
&self,
buffers: &[ChannelIoSlice<'_>],
handles: &mut [Handle],
) -> Result<(), Status>
pub fn writev( &self, buffers: &[ChannelIoSlice<'_>], handles: &mut [Handle], ) -> Result<(), Status>
Write a message to a channel from a set of disjoint buffers. Wraps the zx_channel_write syscall.
On return, the elements pointed to by handles
will have been zeroed to reflect
the fact that the handles have been transferred.
Sourcepub unsafe fn write_raw(
&self,
bytes: *const u8,
bytes_len: usize,
handles: *mut Handle,
handles_len: usize,
) -> Result<(), Status>
pub unsafe fn write_raw( &self, bytes: *const u8, bytes_len: usize, handles: *mut Handle, handles_len: usize, ) -> Result<(), Status>
Write a message to a channel. Wraps the zx_channel_write syscall.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
§Safety
bytes
must be valid to read from for bytes_len
elements.
handles
must be valid to read from and write to for handles_len
elements.
Sourcepub unsafe fn writev_raw(
&self,
buffers: *const ChannelIoSlice<'_>,
buffers_len: usize,
handles: *mut Handle,
handles_len: usize,
) -> Result<(), Status>
pub unsafe fn writev_raw( &self, buffers: *const ChannelIoSlice<'_>, buffers_len: usize, handles: *mut Handle, handles_len: usize, ) -> Result<(), Status>
Write a message to a channel from a set of disjoint buffers. Wraps the zx_channel_write syscall.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
§Safety
buffers
must be valid to read from for buffers_len
elements.
handles
must be valid to read from and write to for handles_len
elements.
Sourcepub fn write_etc(
&self,
bytes: &[u8],
handles: &mut [HandleDisposition<'_>],
) -> Result<(), Status>
pub fn write_etc( &self, bytes: &[u8], handles: &mut [HandleDisposition<'_>], ) -> Result<(), Status>
Write a message to a channel. Wraps the zx_channel_write_etc syscall.
This differs from write
, in that it uses extended handle info.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
Sourcepub fn writev_etc(
&self,
buffers: &[ChannelIoSlice<'_>],
handles: &mut [HandleDisposition<'_>],
) -> Result<(), Status>
pub fn writev_etc( &self, buffers: &[ChannelIoSlice<'_>], handles: &mut [HandleDisposition<'_>], ) -> Result<(), Status>
Write a message to a channel from a set of disjoint buffers. Wraps the zx_channel_write_etc syscall.
This differs from writev
, in that it uses extended handle info.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
Sourcepub unsafe fn write_etc_raw(
&self,
bytes: *const u8,
bytes_len: usize,
handles: *mut HandleDisposition<'_>,
handles_len: usize,
) -> Result<(), Status>
pub unsafe fn write_etc_raw( &self, bytes: *const u8, bytes_len: usize, handles: *mut HandleDisposition<'_>, handles_len: usize, ) -> Result<(), Status>
Write a message to a channel. Wraps the zx_channel_write_etc syscall.
This differs from write_raw
, in that it uses extended handle info.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
§Safety
bytes
must be valid to read from for bytes_len
bytes.
handles
must be valid to read from and write to for handles_len
elements.
Sourcepub unsafe fn writev_etc_raw(
&self,
buffers: *const ChannelIoSlice<'_>,
buffers_len: usize,
handles: *mut HandleDisposition<'_>,
handles_len: usize,
) -> Result<(), Status>
pub unsafe fn writev_etc_raw( &self, buffers: *const ChannelIoSlice<'_>, buffers_len: usize, handles: *mut HandleDisposition<'_>, handles_len: usize, ) -> Result<(), Status>
Write a message to a channel from a set of disjoint buffers. Wraps the zx_channel_write_etc syscall.
This differs from writev_raw
, in that it uses extended handle info.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
§Safety
buffers
must be valid to read from for buffers_len
elements.
handles
must be valid to read from and write to for handles_len
elements.
Sourcepub fn call(
&self,
timeout: Instant<MonotonicTimeline>,
bytes: &[u8],
handles: &mut [Handle],
buf: &mut MessageBuf,
) -> Result<(), Status>
pub fn call( &self, timeout: Instant<MonotonicTimeline>, bytes: &[u8], handles: &mut [Handle], buf: &mut MessageBuf, ) -> Result<(), Status>
Send a message consisting of the given bytes and handles to a channel and block until a reply is received or the timeout is reached.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes of
bytes
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, the provided MessageBuf
will be resized to accommodate
the maximum channel message size. For performance-sensitive code, consider reusing
MessageBuf
s or calling call_uninit
with a stack-allocated buffer.
Wraps the zx_channel_call syscall.
On failure returns the both the main and read status.
Sourcepub fn callv(
&self,
timeout: Instant<MonotonicTimeline>,
buffers_in: &[ChannelIoSlice<'_>],
handles: &mut [Handle],
buf: &mut MessageBuf,
) -> Result<(), Status>
pub fn callv( &self, timeout: Instant<MonotonicTimeline>, buffers_in: &[ChannelIoSlice<'_>], handles: &mut [Handle], buf: &mut MessageBuf, ) -> Result<(), Status>
Send a message consisting of the given disjoint buffers and handles to a channel and block until a reply is received or the timeout is reached.
On return, the elements pointed to by handles
will have been zeroed to reflect the
fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes pointed to
by buffers_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, the provided MessageBuf
will be resized to accommodate
the maximum channel message size. For performance-sensitive code, consider reusing
MessageBuf
s or calling callv_uninit
with a stack-allocated buffer.
Wraps the zx_channel_call syscall.
On failure returns the both the main and read status.
Sourcepub fn call_uninit<'b, 'h>(
&self,
timeout: Instant<MonotonicTimeline>,
bytes_in: &[u8],
handles_in: &mut [Handle],
bytes_out: &'b mut [MaybeUninit<u8>],
handles_out: &'h mut [MaybeUninit<Handle>],
) -> Result<(&'b mut [u8], &'h mut [Handle]), Status>
pub fn call_uninit<'b, 'h>( &self, timeout: Instant<MonotonicTimeline>, bytes_in: &[u8], handles_in: &mut [Handle], bytes_out: &'b mut [MaybeUninit<u8>], handles_out: &'h mut [MaybeUninit<Handle>], ) -> Result<(&'b mut [u8], &'h mut [Handle]), Status>
Send a message consisting of the given bytes and handles to a channel and block until a reply is received or the timeout is reached. Returns initialized slices of byte message and handles on success. Care should be taken to avoid handle leaks by either transferring the returned handles out to another type or dropping them explicitly.
On return, the elements pointed to by handles_in
will have been zeroed to reflect the
fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes of
bytes_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
Wraps the zx_channel_call syscall.
On failure returns the both the main and read status.
Sourcepub fn callv_uninit<'b, 'h>(
&self,
timeout: Instant<MonotonicTimeline>,
buffers_in: &[ChannelIoSlice<'_>],
handles_in: &mut [Handle],
bytes_out: &'b mut [MaybeUninit<u8>],
handles_out: &'h mut [MaybeUninit<Handle>],
) -> Result<(&'b mut [u8], &'h mut [Handle]), Status>
pub fn callv_uninit<'b, 'h>( &self, timeout: Instant<MonotonicTimeline>, buffers_in: &[ChannelIoSlice<'_>], handles_in: &mut [Handle], bytes_out: &'b mut [MaybeUninit<u8>], handles_out: &'h mut [MaybeUninit<Handle>], ) -> Result<(&'b mut [u8], &'h mut [Handle]), Status>
Send a message consisting of the given disjoint buffers and handles to a channel and block until a reply is received or the timeout is reached. Returns initialized slices of byte message and handles on success. Care should be taken to avoid handle leaks by either transferring the returned handles out to another type or dropping them explicitly.
On return, the elements pointed to by handles_in
will have been zeroed to reflect the
fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes pointed to
by buffers_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
Wraps the zx_channel_call syscall.
On failure returns the both the main and read status.
Sourcepub unsafe fn call_raw(
&self,
timeout: Instant<MonotonicTimeline>,
bytes_in: *const u8,
bytes_in_len: usize,
handles_in: *mut Handle,
handles_in_len: usize,
bytes_out: *mut u8,
bytes_out_len: usize,
handles_out: *mut Handle,
handles_out_len: usize,
) -> Result<(usize, usize), Status>
pub unsafe fn call_raw( &self, timeout: Instant<MonotonicTimeline>, bytes_in: *const u8, bytes_in_len: usize, handles_in: *mut Handle, handles_in_len: usize, bytes_out: *mut u8, bytes_out_len: usize, handles_out: *mut Handle, handles_out_len: usize, ) -> Result<(usize, usize), Status>
Send a message consisting of the given bytes and handles to a channel and block until a reply is received or the timeout is reached. On success, returns the number of bytes and handles read from the reply, in that order.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes of
bytes_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
On return, the elements pointed to by handles_in
will have been zeroed to reflect the
fact that the handles have been transferred.
Wraps the zx_channel_call syscall.
On failure returns the both the main and read status.
§Safety
bytes_in
must be valid to read from for bytes_in_len
bytes.
handles_in
must be valid to read from and write to for handles_in_len
elements.
bytes_out
must be valid to write to for bytes_out_len
bytes.
handles_out
must be valid to write to for handles_out_len
elements.
bytes_in
and bytes_out
may overlap. handles_in
and handles_out
may not overlap.
Sourcepub unsafe fn callv_raw(
&self,
timeout: Instant<MonotonicTimeline>,
buffers_in: *const ChannelIoSlice<'_>,
buffers_in_len: usize,
handles_in: *mut Handle,
handles_in_len: usize,
bytes_out: *mut u8,
bytes_out_len: usize,
handles_out: *mut Handle,
handles_out_len: usize,
) -> Result<(usize, usize), Status>
pub unsafe fn callv_raw( &self, timeout: Instant<MonotonicTimeline>, buffers_in: *const ChannelIoSlice<'_>, buffers_in_len: usize, handles_in: *mut Handle, handles_in_len: usize, bytes_out: *mut u8, bytes_out_len: usize, handles_out: *mut Handle, handles_out_len: usize, ) -> Result<(usize, usize), Status>
Send a message consisting of the given disjoint buffers and handles to a channel and block until a reply is received or the timeout is reached. On success, returns the number of bytes and handles read from the reply, in that order.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes pointed to
by buffers_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
On return, the elements pointed to by handles_in
will have been zeroed to reflect the
fact that the handles have been transferred.
Wraps the zx_channel_call syscall.
On failure returns the both the main and read status.
§Safety
buffers_in
must be valid to read from for buffers_in_len
elements.
handles_in
must be valid to read from and write to for handles_in_len
elements.
bytes_out
must be valid to write to for bytes_out_len
bytes.
handles_out
must be valid to write to for handles_out_len
elements.
None of the provided pointers may overlap.
Sourcepub fn call_etc(
&self,
timeout: Instant<MonotonicTimeline>,
bytes: &[u8],
handle_dispositions: &mut [HandleDisposition<'_>],
buf: &mut MessageBufEtc,
) -> Result<(), Status>
pub fn call_etc( &self, timeout: Instant<MonotonicTimeline>, bytes: &[u8], handle_dispositions: &mut [HandleDisposition<'_>], buf: &mut MessageBufEtc, ) -> Result<(), Status>
Send a message consisting of the given bytes and handles to a channel and block until a reply is received or the timeout is reached.
On return, the elements pointed to by handle_dispositions
will have been zeroed to reflect
the fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes of
bytes
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, the provided MessageBufEtc
will be resized to
accommodate the maximum channel message size. For performance-sensitive code, consider
reusing MessageBufEtc
s or calling call_etc_uninit
with a stack-allocated buffer.
This differs from call
, in that it uses extended handle info.
Wraps the zx_channel_call_etc syscall.
On failure returns the both the main and read status.
Sourcepub fn callv_etc(
&self,
timeout: Instant<MonotonicTimeline>,
buffers_in: &[ChannelIoSlice<'_>],
handle_dispositions: &mut [HandleDisposition<'_>],
buf: &mut MessageBufEtc,
) -> Result<(), Status>
pub fn callv_etc( &self, timeout: Instant<MonotonicTimeline>, buffers_in: &[ChannelIoSlice<'_>], handle_dispositions: &mut [HandleDisposition<'_>], buf: &mut MessageBufEtc, ) -> Result<(), Status>
Send a message consisting of the given disjoint buffers and handles to a channel and block until a reply is received or the timeout is reached.
On return, the elements pointed to by handle_dispositions
will have been zeroed to reflect
the fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes pointed to
by buffers_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
In order to avoid dropping replies, the provided MessageBufEtc
will be resized to
accommodate the maximum channel message size. For performance-sensitive code, consider
reusing MessageBufEtc
s or calling call_etc_uninit
with a stack-allocated buffer.
This differs from callv
, in that it uses extended handle info.
Wraps the zx_channel_call_etc syscall.
On failure returns the both the main and read status.
Sourcepub fn call_etc_uninit<'b, 'h>(
&self,
timeout: Instant<MonotonicTimeline>,
bytes_in: &[u8],
handles_in: &mut [HandleDisposition<'_>],
bytes_out: &'b mut [MaybeUninit<u8>],
handles_out: &'h mut [MaybeUninit<HandleInfo>],
) -> Result<(&'b mut [u8], &'h mut [HandleInfo]), Status>
pub fn call_etc_uninit<'b, 'h>( &self, timeout: Instant<MonotonicTimeline>, bytes_in: &[u8], handles_in: &mut [HandleDisposition<'_>], bytes_out: &'b mut [MaybeUninit<u8>], handles_out: &'h mut [MaybeUninit<HandleInfo>], ) -> Result<(&'b mut [u8], &'h mut [HandleInfo]), Status>
Send a message consisting of the given bytes and handles to a channel and block until a reply is received or the timeout is reached. Returns initialized slices of byte message and handles on success. Care should be taken to avoid handle leaks by either transferring the returned handles out to another type or dropping them explicitly.
On return, the elements pointed to by handles_in
will have been zeroed to reflect
the fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes of
bytes_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
This differs from call_uninit
, in that it uses extended handle info.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
Wraps the zx_channel_call_etc syscall.
On failure returns the both the main and read status.
Sourcepub fn callv_etc_uninit<'b, 'h>(
&self,
timeout: Instant<MonotonicTimeline>,
buffers_in: &[ChannelIoSlice<'_>],
handles_in: &mut [HandleDisposition<'_>],
bytes_out: &'b mut [MaybeUninit<u8>],
handles_out: &'h mut [MaybeUninit<HandleInfo>],
) -> Result<(&'b mut [u8], &'h mut [HandleInfo]), Status>
pub fn callv_etc_uninit<'b, 'h>( &self, timeout: Instant<MonotonicTimeline>, buffers_in: &[ChannelIoSlice<'_>], handles_in: &mut [HandleDisposition<'_>], bytes_out: &'b mut [MaybeUninit<u8>], handles_out: &'h mut [MaybeUninit<HandleInfo>], ) -> Result<(&'b mut [u8], &'h mut [HandleInfo]), Status>
Send a message consisting of the given disjoint buffers and handles to a channel and block until a reply is received or the timeout is reached. Returns initialized slices of byte message and handles on success. Care should be taken to avoid handle leaks by either transferring the returned handles out to another type or dropping them explicitly.
On return, the elements pointed to by handles_in
will have been zeroed to reflect
the fact that the handles have been transferred.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes pointed to
by buffers_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
This differs from callv_uninit
, in that it uses extended handle info.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
Wraps the zx_channel_call_etc syscall.
On failure returns the both the main and read status.
Sourcepub unsafe fn call_etc_raw(
&self,
timeout: Instant<MonotonicTimeline>,
bytes_in: *const u8,
bytes_in_len: usize,
handles_in: *mut HandleDisposition<'_>,
handles_in_len: usize,
bytes_out: *mut u8,
bytes_out_len: usize,
handles_out: *mut HandleInfo,
handles_out_len: usize,
) -> Result<(usize, usize), Status>
pub unsafe fn call_etc_raw( &self, timeout: Instant<MonotonicTimeline>, bytes_in: *const u8, bytes_in_len: usize, handles_in: *mut HandleDisposition<'_>, handles_in_len: usize, bytes_out: *mut u8, bytes_out_len: usize, handles_out: *mut HandleInfo, handles_out_len: usize, ) -> Result<(usize, usize), Status>
Send a message consisting of the given bytes and handles to a channel and block until a reply is received or the timeout is reached. On success, returns the number of bytes and handles read from the reply, in that order.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes of
bytes_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
This differs from call_raw
, in that it uses extended handle info.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
On return, the elements pointed to by handles_in
will have been zeroed to reflect the
fact that the handles have been transferred.
Wraps the zx_channel_call_etc syscall.
On failure returns the both the main and read status.
§Safety
bytes_in
must be valid to read from for bytes_in_len
bytes.
handles_in
must be valid to read from and write to for handles_in_len
elements.
bytes_out
must be valid to write to for bytes_out_len
bytes.
handles_out
must be valid to write to for handles_out_len
elements.
bytes_in
and bytes_out
may overlap.
Sourcepub unsafe fn callv_etc_raw(
&self,
timeout: Instant<MonotonicTimeline>,
buffers_in: *const ChannelIoSlice<'_>,
buffers_in_len: usize,
handles_in: *mut HandleDisposition<'_>,
handles_in_len: usize,
bytes_out: *mut u8,
bytes_out_len: usize,
handles_out: *mut HandleInfo,
handles_out_len: usize,
) -> Result<(usize, usize), Status>
pub unsafe fn callv_etc_raw( &self, timeout: Instant<MonotonicTimeline>, buffers_in: *const ChannelIoSlice<'_>, buffers_in_len: usize, handles_in: *mut HandleDisposition<'_>, handles_in_len: usize, bytes_out: *mut u8, bytes_out_len: usize, handles_out: *mut HandleInfo, handles_out_len: usize, ) -> Result<(usize, usize), Status>
Send a message consisting of the given disjoint buffers and handles to a channel and block until a reply is received or the timeout is reached. On success, returns the number of bytes and handles read from the reply, in that order.
The first four bytes of the written and read back messages are treated as a transaction ID
of type zx_txid_t
. The kernel generates a txid for the written message, replacing that
part of the message as read from userspace. In other words, the first four bytes pointed to
by buffers_in
will be ignored, and the first four bytes of the response will contain a
kernel-generated txid.
This differs from callv_raw
, in that it uses extended handle info.
In order to avoid dropping replies, this wrapper requires that the provided out buffers have enough space to handle the largest channel messages possible.
On return, the elements pointed to by handles_in
will have been zeroed to reflect the
fact that the handles have been transferred.
Wraps the zx_channel_call_etc syscall.
On failure returns the both the main and read status.
§Safety
buffers_in
must be valid to read from for buffers_in_len
elements.
handles_in
must be valid to read from and write to for handles_in_len
elements.
bytes_out
must be valid to write to for bytes_out_len
bytes.
handles_out
must be valid to write to for handles_out_len
elements.
None of the provided pointers may overlap.
Trait Implementations§
Source§impl AsHandleRef for Channel
impl AsHandleRef for Channel
Source§fn as_handle_ref(&self) -> Unowned<'_, Handle>
fn as_handle_ref(&self) -> Unowned<'_, Handle>
object_wait_many
.