pub trait EvalContextExt<'mir, 'tcx: 'mir>: MiriInterpCxExt<'mir, 'tcx> {
// Provided methods
fn epoll_create1(
&mut self,
flags: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>> { ... }
fn epoll_ctl(
&mut self,
epfd: &OpTy<'tcx, Provenance>,
op: &OpTy<'tcx, Provenance>,
fd: &OpTy<'tcx, Provenance>,
event: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>> { ... }
fn epoll_wait(
&mut self,
epfd: &OpTy<'tcx, Provenance>,
events: &OpTy<'tcx, Provenance>,
maxevents: &OpTy<'tcx, Provenance>,
timeout: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>> { ... }
fn eventfd(
&mut self,
val: &OpTy<'tcx, Provenance>,
flags: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>> { ... }
fn socketpair(
&mut self,
domain: &OpTy<'tcx, Provenance>,
type_: &OpTy<'tcx, Provenance>,
protocol: &OpTy<'tcx, Provenance>,
sv: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>> { ... }
}
Provided Methods§
sourcefn epoll_create1(
&mut self,
flags: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>>
fn epoll_create1( &mut self, flags: &OpTy<'tcx, Provenance> ) -> InterpResult<'tcx, Scalar<Provenance>>
This function returns a file descriptor referring to the new Epoll
instance. This file
descriptor is used for all subsequent calls to the epoll interface. If the flags
argument
is 0, then this function is the same as epoll_create()
.
sourcefn epoll_ctl(
&mut self,
epfd: &OpTy<'tcx, Provenance>,
op: &OpTy<'tcx, Provenance>,
fd: &OpTy<'tcx, Provenance>,
event: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>>
fn epoll_ctl( &mut self, epfd: &OpTy<'tcx, Provenance>, op: &OpTy<'tcx, Provenance>, fd: &OpTy<'tcx, Provenance>, event: &OpTy<'tcx, Provenance> ) -> InterpResult<'tcx, Scalar<Provenance>>
This function performs control operations on the Epoll
instance referred to by the file
descriptor epfd
. It requests that the operation op
be performed for the target file
descriptor, fd
.
Valid values for the op argument are:
EPOLL_CTL_ADD
- Register the target file descriptor fd
on the Epoll
instance referred
to by the file descriptor epfd
and associate the event event
with the internal file
linked to fd
.
EPOLL_CTL_MOD
- Change the event event
associated with the target file descriptor fd
.
EPOLL_CTL_DEL
- Deregister the target file descriptor fd
from the Epoll
instance
referred to by epfd
. The event
is ignored and can be null.
sourcefn epoll_wait(
&mut self,
epfd: &OpTy<'tcx, Provenance>,
events: &OpTy<'tcx, Provenance>,
maxevents: &OpTy<'tcx, Provenance>,
timeout: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>>
fn epoll_wait( &mut self, epfd: &OpTy<'tcx, Provenance>, events: &OpTy<'tcx, Provenance>, maxevents: &OpTy<'tcx, Provenance>, timeout: &OpTy<'tcx, Provenance> ) -> InterpResult<'tcx, Scalar<Provenance>>
The epoll_wait()
system call waits for events on the Epoll
instance referred to by the file descriptor epfd
. The buffer
pointed to by events
is used to return information from the ready
list about file descriptors in the interest list that have some
events available. Up to maxevents
are returned by epoll_wait()
.
The maxevents
argument must be greater than zero.
The timeout
argument specifies the number of milliseconds that
epoll_wait()
will block. Time is measured against the
CLOCK_MONOTONIC clock.
A call to epoll_wait()
will block until either:
• a file descriptor delivers an event;
• the call is interrupted by a signal handler; or
• the timeout expires.
Note that the timeout interval will be rounded up to the system
clock granularity, and kernel scheduling delays mean that the
blocking interval may overrun by a small amount. Specifying a
timeout of -1 causes epoll_wait()
to block indefinitely, while
specifying a timeout equal to zero cause epoll_wait()
to return
immediately, even if no events are available.
On success, epoll_wait()
returns the number of file descriptors
ready for the requested I/O, or zero if no file descriptor became
ready during the requested timeout milliseconds. On failure,
epoll_wait()
returns -1 and errno is set to indicate the error.
sourcefn eventfd(
&mut self,
val: &OpTy<'tcx, Provenance>,
flags: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>>
fn eventfd( &mut self, val: &OpTy<'tcx, Provenance>, flags: &OpTy<'tcx, Provenance> ) -> InterpResult<'tcx, Scalar<Provenance>>
This function creates an Event
that is used as an event wait/notify mechanism by
user-space applications, and by the kernel to notify user-space applications of events.
The Event
contains an u64
counter maintained by the kernel. The counter is initialized
with the value specified in the initval
argument.
A new file descriptor referring to the Event
is returned. The read
, write
, poll
,
select
, and close
operations can be performed on the file descriptor. For more
information on these operations, see the man page linked below.
The flags
are not currently implemented for eventfd.
The flags
may be bitwise ORed to change the behavior of eventfd
:
EFD_CLOEXEC
- Set the close-on-exec (FD_CLOEXEC
) flag on the new file descriptor.
EFD_NONBLOCK
- Set the O_NONBLOCK
file status flag on the new open file description.
EFD_SEMAPHORE
- miri does not support semaphore-like semantics.
sourcefn socketpair(
&mut self,
domain: &OpTy<'tcx, Provenance>,
type_: &OpTy<'tcx, Provenance>,
protocol: &OpTy<'tcx, Provenance>,
sv: &OpTy<'tcx, Provenance>
) -> InterpResult<'tcx, Scalar<Provenance>>
fn socketpair( &mut self, domain: &OpTy<'tcx, Provenance>, type_: &OpTy<'tcx, Provenance>, protocol: &OpTy<'tcx, Provenance>, sv: &OpTy<'tcx, Provenance> ) -> InterpResult<'tcx, Scalar<Provenance>>
Currently this function creates new SocketPair
s without specifying the domain, type, or
protocol of the new socket and these are stored in the socket values sv
argument.
This function creates an unnamed pair of connected sockets in the specified domain, of the specified type, and using the optionally specified protocol.
The domain
argument specified a communication domain; this selects the protocol family
used for communication. The socket type
specifies the communication semantics.
The protocol
specifies a particular protocol to use with the socket. Normally there’s
only a single protocol supported for a particular socket type within a given protocol
family, in which case protocol
can be specified as 0. It is possible that many protocols
exist and in that case, a particular protocol must be specified.
For more information on the arguments see the socket manpage: https://linux.die.net/man/2/socket