pub(super) struct TcpSocket {
family: SocketFamily,
state: RefCell<SocketState>,
is_non_block: Cell<bool>,
io_readiness: RefCell<Readiness>,
error: RefCell<Option<Error>>,
read_timeout: Cell<Option<Duration>>,
write_timeout: Cell<Option<Duration>>,
watched: ReadinessWatched,
}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<Readiness>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.
watched: ReadinessWatchedState for being watched by epoll.
Implementations§
Trait Implementations§
Source§impl FileDescription for TcpSocket
impl FileDescription for TcpSocket
fn name(&self) -> &'static str
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: FileDescriptionRef<Self>, _ecx: &MiriInterpCx<'tcx>, ) -> FileDescriptionRef<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 readiness_watched(&self) -> Option<&ReadinessWatched>
fn readiness_watched(&self) -> Option<&ReadinessWatched>
ReadinessWatched of the file description.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 TcpSocket
impl SourceFileDescription for TcpSocket
Source§impl UnixFileDescription for TcpSocket
impl UnixFileDescription for TcpSocket
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 as_socket<'tcx>(
self: FileDescriptionRef<Self>,
_ecx: &MiriInterpCx<'tcx>,
) -> Option<FileDescriptionRef<dyn UnixSocketFileDescription>>
fn as_socket<'tcx>( self: FileDescriptionRef<Self>, _ecx: &MiriInterpCx<'tcx>, ) -> Option<FileDescriptionRef<dyn UnixSocketFileDescription>>
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<()>>
Source§impl UnixSocketFileDescription for TcpSocket
impl UnixSocketFileDescription for TcpSocket
Source§fn bind<'tcx>(
self: FileDescriptionRef<TcpSocket>,
communicate_allowed: bool,
address: SocketAddr,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<(), IoError>>
fn bind<'tcx>( self: FileDescriptionRef<TcpSocket>, communicate_allowed: bool, address: SocketAddr, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<(), IoError>>
address.Source§fn listen<'tcx>(
self: FileDescriptionRef<TcpSocket>,
communicate_allowed: bool,
_backlog: i32,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<(), IoError>>
fn listen<'tcx>( self: FileDescriptionRef<TcpSocket>, communicate_allowed: bool, _backlog: i32, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<(), IoError>>
backlog specifies how many pending incoming connections can exist at the same
time before new requests are rejected.Source§fn accept<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
is_client_sock_non_block: bool,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<(i32, SocketAddr), IoError>>,
) -> InterpResult<'tcx>
fn accept<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, is_client_sock_non_block: bool, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<(i32, SocketAddr), IoError>>, ) -> InterpResult<'tcx>
is_client_sock_non_block specifies whether the newly accepted client connection
should be non-blocking.
After a successful accept, finish should be called with a tuple containing the
file descriptor of the peer socket and it’s address.Source§fn connect<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
address: SocketAddr,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<(), IoError>>,
) -> InterpResult<'tcx>
fn connect<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, address: SocketAddr, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<(), IoError>>, ) -> InterpResult<'tcx>
address.Source§fn send<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
ptr: Pointer,
len: usize,
is_non_block: bool,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn send<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, ptr: Pointer, len: usize, is_non_block: bool, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr into the socket.
len indicates how many bytes we should try to send.
is_non_block specifies whether the send operation is non-blocking.
After a successful send, finish should be called with the amount of bytes sent.Source§fn recv<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
ptr: Pointer,
len: usize,
is_peek: bool,
is_non_block: bool,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn recv<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, ptr: Pointer, len: usize, is_peek: bool, is_non_block: bool, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr.
len indicates how many bytes we should try to receive.
is_peek specifies whether the receive removes the bytes from the receive buffer
(false) or leaves them in the receive buffer (true).
is_non_block specifies whether the receive operation is non-blocking.
After a successful receive, finish should be called with the amount of bytes received.Source§fn setsockopt<'tcx>(
self: FileDescriptionRef<Self>,
level: i32,
option: i32,
value_ptr: Pointer,
value_len: u64,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<(), IoError>>
fn setsockopt<'tcx>( self: FileDescriptionRef<Self>, level: i32, option: i32, value_ptr: Pointer, value_len: u64, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<(), IoError>>
option on level.
value_ptr points to the new value of the socket option, and value_len contains
the amount of bytes the value uses at value_ptr.Source§fn getsockopt<'tcx>(
self: FileDescriptionRef<Self>,
level: i32,
option: i32,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<MPlaceTy<'tcx>, IoError>>
fn getsockopt<'tcx>( self: FileDescriptionRef<Self>, level: i32, option: i32, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<MPlaceTy<'tcx>, IoError>>
option on level.Source§fn getsockname<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<SocketAddr, IoError>>
fn getsockname<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<SocketAddr, IoError>>
Source§fn getpeername<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
ecx: &mut MiriInterpCx<'tcx>,
finish: DynMachineCallback<'tcx, Result<SocketAddr, IoError>>,
) -> InterpResult<'tcx>
fn getpeername<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, ecx: &mut MiriInterpCx<'tcx>, finish: DynMachineCallback<'tcx, Result<SocketAddr, IoError>>, ) -> InterpResult<'tcx>
Source§fn shutdown<'tcx>(
self: FileDescriptionRef<Self>,
communicate_allowed: bool,
how: Shutdown,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<(), IoError>>
fn shutdown<'tcx>( self: FileDescriptionRef<Self>, communicate_allowed: bool, how: Shutdown, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<(), IoError>>
Auto Trait Implementations§
impl !DynSend for TcpSocket
impl !DynSync for TcpSocket
impl !Freeze for TcpSocket
impl !RefUnwindSafe for TcpSocket
impl !Send for TcpSocket
impl !Sync for TcpSocket
impl !UnwindSafe for TcpSocket
impl Unpin for TcpSocket
impl UnsafeUnpin for TcpSocket
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>
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: 216 bytes