Module Linux_ext.Epoll
epoll(): a Linux I/O multiplexer of the same family as select() or poll(). Its main differences are support for Edge- or Level-triggered notifications (we're using Level-triggered to emulate "select") and much better scaling with the number of file descriptors.
See the man pages for a full description of the epoll facility.
module Flags : sig ... endtype tAn
Epoll.tmaintains a map fromFile_descr.ttoFlags.t, where the domain is the set of file descriptors that one is interested in, and the flags associated with each file descriptor specify the types of events one is interested in being notified about for that file descriptor. Our implementation maintains a user-level table equivalent to the kernel epoll set, so thatsexp_of_tproduces useful human-readable information, and so that we can present our standard table interface.The implementation assumes that one never closes a file descriptor that is the domain of an
Epoll.t, since doing so might remove thefdfrom the kernel epoll set without the implementation's knowledge.An
Epoll.talso has a buffer that is used to store the set of readyfds returned by callingwait.
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
val invariant : t -> unitval create : (num_file_descrs:int -> max_ready_events:int -> t) Core__.Import.Or_error.tcreate ~num_file_descrscreates a new epoll set able to watch file descriptors in [0,num_file_descrs). Additionally, the set allocates space for reading the "ready" events whenwaitreturns, allowing for up tomax_ready_eventsto be returned in a single call towait.
val close : t -> unit
val find : t -> Core__.Core_unix.File_descr.t -> Flags.t optionfindraises in the case thattis closed.
val find_exn : t -> Core__.Core_unix.File_descr.t -> Flags.tval set : t -> Core__.Core_unix.File_descr.t -> Flags.t -> unitval remove : t -> Core__.Core_unix.File_descr.t -> unitval iter : t -> f:(Core__.Core_unix.File_descr.t -> Flags.t -> unit) -> unitval wait : t -> timeout:[ `Never | `Immediately | `After of Core__.Import.Time_ns.Span.t ] -> [ `Ok | `Timeout ]wait t ~timeoutblocks until at least one file descriptor intis ready for one of the events it is being watched for, ortimeoutpasses.waitside effectstby storing the ready set in it. One can subsequently access the ready set by callingiter_readyorfold_ready.With
wait ~timeout:(`After span),span <= 0is treated as0. Ifspan > 0, thenspanis rounded to the nearest millisecond, with a minimum value of one millisecond.Note that this method should not be considered thread-safe. There is mutable state in
tthat will be changed by invocations towaitthat cannot be prevented by mutexes aroundwait.
val wait_timeout_after : t -> Core__.Import.Time_ns.Span.t -> [ `Ok | `Timeout ]wait_timeout_after t span = wait t ~timeout:(`After span).wait_timeout_afteris a performance hack to avoid allocating`After span.
val iter_ready : t -> f:(Core__.Core_unix.File_descr.t -> Flags.t -> unit) -> unititer_readyandfold_readyiterate over the ready set computed by the last call towait.
val fold_ready : t -> init:'a -> f:('a -> Core__.Core_unix.File_descr.t -> Flags.t -> 'a) -> 'a