struct Socket {
family: SocketFamily,
state: RefCell<SocketState>,
is_non_block: Cell<bool>,
io_readiness: RefCell<BlockingIoSourceReadiness>,
error: RefCell<Option<Error>>,
read_timeout: Cell<Option<Duration>>,
write_timeout: Cell<Option<Duration>>,
}Fields§
§family: SocketFamilyFamily of the socket, used to ensure socket only binds/connects to address of same family.
state: RefCell<SocketState>Current state of the inner socket.
is_non_block: Cell<bool>Whether this fd is non-blocking or not.
io_readiness: RefCell<BlockingIoSourceReadiness>The current blocking I/O readiness of the file description.
error: RefCell<Option<Error>>Some when the socket had an async error which has not yet been fetched via SO_ERROR.
read_timeout: Cell<Option<Duration>>Read timeout of the socket. None means that reads can block indefinitely.
The timeout is applied to the monotonic clock (the Unix specification doesn’t
specify which clock to use, but the monotonic clock is more common for
relative timeouts).
This is ignored when the socket is non-blocking.
write_timeout: Cell<Option<Duration>>Write timeout of the socket. None means that writes can block indefinitely.
The timeout is applied to the monotonic clock (the Unix specification doesn’t
specify which clock to use, but the monotonic clock is more common
for relative timeouts).
This is ignored when the socket is non-blocking.
Trait Implementations§
Source§impl FileDescription for Socket
impl FileDescription for Socket
fn name(&self) -> &'static str
Source§fn destroy<'tcx>(
self,
self_id: FdId,
communicate_allowed: bool,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<()>>
fn destroy<'tcx>( self, self_id: FdId, communicate_allowed: bool, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<()>>
Source§fn read<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
ptr: Pointer,
len: usize,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn read<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, ptr: Pointer, len: usize, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr.
len indicates how many bytes we should try to read. Read moreSource§fn write<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
ptr: Pointer,
len: usize,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn write<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, ptr: Pointer, len: usize, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr.
len indicates how many bytes we should try to write. Read moreSource§fn short_fd_operations(&self) -> bool
fn short_fd_operations(&self) -> bool
fn as_unix<'tcx>(&self, _ecx: &MiriInterpCx<'tcx>) -> &dyn UnixFileDescription
Source§fn get_flags<'tcx>(
&self,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar>
fn get_flags<'tcx>( &self, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Scalar>
Source§fn set_flags<'tcx>(
&self,
flag: i32,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar>
fn set_flags<'tcx>( &self, flag: i32, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Scalar>
Source§fn seek<'tcx>(
&self,
_communicate_allowed: bool,
_offset: SeekFrom,
) -> InterpResult<'tcx, Result<u64>>
fn seek<'tcx>( &self, _communicate_allowed: bool, _offset: SeekFrom, ) -> InterpResult<'tcx, Result<u64>>
Source§fn metadata<'tcx>(
&self,
) -> InterpResult<'tcx, Either<Result<Metadata>, &'static str>>
fn metadata<'tcx>( &self, ) -> InterpResult<'tcx, Either<Result<Metadata>, &'static str>>
libc name so we only
support that kind of metadata on Unix targets.fn is_tty(&self, _communicate_allowed: bool) -> bool
Source§impl SourceFileDescription for Socket
impl SourceFileDescription for Socket
Source§fn with_source(
&self,
f: &mut dyn FnMut(&mut dyn Source) -> Result<()>,
) -> Result<()>
fn with_source( &self, f: &mut dyn FnMut(&mut dyn Source) -> Result<()>, ) -> Result<()>
f on the source inside self.Source§fn get_readiness_mut(&self) -> RefMut<'_, BlockingIoSourceReadiness>
fn get_readiness_mut(&self) -> RefMut<'_, BlockingIoSourceReadiness>
Source§impl UnixFileDescription for Socket
impl UnixFileDescription for Socket
Source§fn ioctl<'tcx>(
&self,
op: Scalar,
arg: Option<&OpTy<'tcx>>,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, i32>
fn ioctl<'tcx>( &self, op: Scalar, arg: Option<&OpTy<'tcx>>, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, i32>
op is the device-dependent operation code. It’s either a c_long or c_int, depending on
the target and whether it uses glibc or musl.
arg is the optional third argument which exists depending on the operation code. It’s either
an integer or a pointer.Source§fn epoll_active_events<'tcx>(&self) -> InterpResult<'tcx, EpollReadiness>
fn epoll_active_events<'tcx>(&self) -> InterpResult<'tcx, EpollReadiness>
Source§fn pread<'tcx>(
&self,
_communicate_allowed: bool,
_offset: u64,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn pread<'tcx>( &self, _communicate_allowed: bool, _offset: u64, _ptr: Pointer, _len: usize, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr from a given offset.
len indicates how many bytes we should try to read.
dest is where the return value should be stored: number of bytes read, or -1 in case of error.Source§fn pwrite<'tcx>(
&self,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_offset: u64,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn pwrite<'tcx>( &self, _communicate_allowed: bool, _ptr: Pointer, _len: usize, _offset: u64, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr starting at a given offset.
ptr is the pointer to the user supplied read buffer.
len indicates how many bytes we should try to write.
dest is where the return value should be stored: number of bytes written, or -1 in case of error.fn flock<'tcx>( &self, _communicate_allowed: bool, _op: FlockOp, ) -> InterpResult<'tcx, Result<()>>
Auto Trait Implementations§
impl !Freeze for Socket
impl !RefUnwindSafe for Socket
impl Send for Socket
impl !Sync for Socket
impl Unpin for Socket
impl UnsafeUnpin for Socket
impl !UnwindSafe for Socket
Blanket Implementations§
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
Source§impl<T> FileDescriptionExt for Twhere
T: FileDescription + 'static,
impl<T> FileDescriptionExt for Twhere
T: FileDescription + 'static,
fn into_rc_any(self: FileDescriptionRef<T>) -> Rc<dyn Any>
Source§fn close_ref<'tcx>(
self: FileDescriptionRef<T>,
communicate_allowed: bool,
ecx: &mut InterpCx<'tcx, MiriMachine<'tcx>>,
) -> InterpResult<'tcx, Result<(), Error>>
fn close_ref<'tcx>( self: FileDescriptionRef<T>, communicate_allowed: bool, ecx: &mut InterpCx<'tcx, MiriMachine<'tcx>>, ) -> InterpResult<'tcx, Result<(), Error>>
close function generically, so both handle Rc::into_inner
and epoll interest management.Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 112 bytes