package eio_linux

  1. Overview
  2. Docs

Module Eio_linux.Low_levelSource

Low-level API

Low-level API for using uring directly.

type fd := Eio_unix.Fd.t
Sourcetype dir_fd =
  1. | FD of fd
  2. | Cwd
    (*

    Confined to "."

    *)
  3. | Fs
    (*

    Unconfined "."; also allows absolute paths

    *)
Sourceval noop : unit -> unit

noop () performs a uring noop. This is only useful for benchmarking.

Time functions

Sourceval sleep_until : Mtime.t -> unit

sleep_until time blocks until the current time is time.

Fixed-buffer memory allocation functions

The size of the fixed buffer is set when calling Eio_linux.run, which attempts to allocate a fixed buffer. However, that may fail due to resource limits.

Sourcemodule Fixed : sig ... end

Fixed-buffer support.

File manipulation functions

Sourceval openat : sw:Eio.Std.Switch.t -> ?seekable:bool -> access:[ `R | `W | `RW ] -> flags:Uring.Open_flags.t -> perm:Unix.file_perm -> dir_fd -> string -> fd

openat ~sw ~access ~flags ~perm dir path opens dir/path.

Sourceval openat2 : sw:Eio.Std.Switch.t -> ?seekable:bool -> access:[ `R | `W | `RW ] -> flags:Uring.Open_flags.t -> perm:Unix.file_perm -> resolve:Uring.Resolve.t -> ?dir:fd -> string -> fd

openat2 ~sw ~access ~flags ~perm ~resolve ~dir path opens dir/path.

It provides full access to the resolve flags. See Uring.openat2 for details.

Sourceval read_upto : ?file_offset:Optint.Int63.t -> fd -> Fixed.chunk -> int -> int

read_upto fd chunk len reads at most len bytes from fd, returning as soon as some data is available.

  • parameter file_offset

    Read from the given position in fd (default: current position).

  • raises End_of_file

    Raised if all data has already been read.

Sourceval read_exactly : ?file_offset:Optint.Int63.t -> fd -> Fixed.chunk -> int -> unit

read_exactly fd chunk len reads exactly len bytes from fd, performing multiple read operations if necessary.

  • parameter file_offset

    Read from the given position in fd (default: current position).

  • raises End_of_file

    Raised if the stream ends before len bytes have been read.

Sourceval readv : ?file_offset:Optint.Int63.t -> fd -> Cstruct.t list -> int

readv is like read_upto but can read into any cstruct(s), not just chunks of the pre-shared buffer.

If multiple buffers are given, they are filled in order.

Sourceval write : ?file_offset:Optint.Int63.t -> fd -> Fixed.chunk -> int -> unit

write fd buf len writes exactly len bytes from buf to fd.

It blocks until the OS confirms the write is done, and resubmits automatically if the OS doesn't write all of it at once.

Sourceval writev : ?file_offset:Optint.Int63.t -> fd -> Cstruct.t list -> unit

writev is like write but can write from any cstruct(s), not just chunks of the pre-shared buffer.

If multiple buffers are given, they are sent in order. It will make multiple OS calls if the OS doesn't write all of it at once.

Sourceval writev_single : ?file_offset:Optint.Int63.t -> fd -> Cstruct.t list -> int

writev_single is like writev but only performs a single write operation. It returns the number of bytes written, which may be smaller than the requested amount.

Sourceval splice : fd -> dst:fd -> len:int -> int

splice src ~dst ~len attempts to copy up to len bytes of data from src to dst.

  • returns

    The number of bytes copied.

  • raises Unix.Unix_error

    with args (EINVAL, "splice", _) if splice is not supported for these FDs.

Sourceval connect : fd -> Unix.sockaddr -> unit

connect fd addr attempts to connect socket fd to addr.

Sourceval await_readable : fd -> unit

await_readable fd blocks until fd is readable (or has an error).

Sourceval await_writable : fd -> unit

await_writable fd blocks until fd is writable (or has an error).

Sourceval fstat : fd -> Eio.File.Stat.t

Like Unix.LargeFile.fstat.

Sourceval eio_of_statx : Uring.Statx.t -> Eio.File.Stat.t

eio_of_statx x converts a statx buffer to a more portable stat record. The buffer should have been filled using at least Uring.Statx.Mask.basic_stats.

Sourceval statx : mask:Uring.Statx.Mask.t -> follow:bool -> dir_fd -> string -> Uring.Statx.t -> unit

statx ~mask ~follow dir path buf stats dir / path.

The results are written to buf. If follow = true and the item is a symlink, information is reported about the target of the link. Otherwise, information about the symlink itself is returned.

Sourceval mkdir : perm:int -> dir_fd -> string -> unit

mkdir ~perm dir path creates directory dir / path.

read_link dir path reads the target of symlink dir / path.

unlink ~rmdir dir path removes directory entry dir / path.

If rmdir = true then the target must be a directory. Otherwise, it must not be a directory.

Sourceval rename : dir_fd -> string -> dir_fd -> string -> unit

rename old_dir old_path new_dir new_path renames old_dir / old_path as new_dir / new_path.

symlink ~link_to dir path creates a new symlink at dir / path pointing to link_to.

Sourceval chmod : follow:bool -> mode:int -> dir_fd -> string -> unit

chmod ~follow ~mode dir path changes the file mode bits of dir / path.

Sourceval chown : follow:bool -> ?uid:int64 -> ?gid:int64 -> dir_fd -> string -> unit

chown ~follow ~uid ~gid dir path changes the ownership of dir / path to uid, gid.

If follow = true and dir / path is a symlink, then the ownership of the target is changed. If it is false then the ownership of the symlink itself is changed.

Sourceval pipe : sw:Eio.Std.Switch.t -> fd * fd

pipe ~sw returns a pair r, w with the readable and writeable ends of a new pipe.

Sourceval read_dir : fd -> string list

read_dir dir reads all directory entries from dir. The entries are not returned in any particular order (not even necessarily the order in which Linux returns them).

Sourceval read_some_dir : fd -> (Eio.File.Stat.kind * string) list

read_some_dir dir reads some of the directory entries from dir, including their kind. The entries are not returned in any particular order (not even necessarily the order in which Linux returns them).

Sourceval lseek : fd -> Optint.Int63.t -> [ `Set | `Cur | `End ] -> Optint.Int63.t

Set and/or get the current file position.

Like Unix.lseek.

Sourceval fsync : fd -> unit

Flush file buffers to disk.

Like Unix.fsync.

Sourceval fdatasync : fd -> unit

Flush file data to disk.

Like fsync, but does not wait for metadata that is not needed to read the data back. The aim is to reduce disk activity for callers that do not require all metadata to be synchronized with the disk.

Sourceval ftruncate : fd -> Optint.Int63.t -> unit

Set the length of a file.

Like Unix.ftruncate.

  • since 1.4
Sourceval fallocate : ?mode:Uring.Fallocate_flags.t -> fd -> off:Optint.Int63.t -> len:Optint.Int63.t -> unit

fallocate fd ~off ~len manipulates the disk space allocated for the len bytes of fd starting at off (the fallocate(2) call).

With the default mode (the empty set of flags) this allocates the region as for posix_fallocate(3), extending the file's size if needed. See Uring.Fallocate_flags for other modes, such as punching holes.

  • since 1.4

Sockets

Sourceval socket : sw:Eio.Std.Switch.t -> Unix.socket_domain -> Unix.socket_type -> int -> fd

socket ~sw domain ty protocol creates a new socket, like Unix.socket.

The new socket has the close-on-exec flag set and is attached to sw. On Linux >= 5.19 this uses io_uring and on older kernels it falls back to a socket(2) call.

  • since 1.4
Sourceval bind : fd -> Unix.sockaddr -> unit

bind fd addr binds socket fd to addr, like Unix.bind.

On Linux >= 6.11 this uses io_uring and on older kernels falls back to a bind(2) call.

  • since 1.4
Sourceval listen : fd -> int -> unit

listen fd backlog marks socket fd as accepting connections, like Unix.listen.

On Linux >= 6.11 this uses io_uring and on older kernels falls back to a listen(2) call.

  • since 1.4
Sourceval accept : sw:Eio.Std.Switch.t -> fd -> fd * Unix.sockaddr

accept ~sw t blocks until a new connection is received on listening socket t.

It returns the new connection and the address of the connecting peer. The new connection has the close-on-exec flag set automatically. The new connection is attached to sw and will be closed when that finishes, if not already closed manually by then.

Sourceval shutdown : fd -> Unix.shutdown_command -> unit

Like Unix.shutdown.

Sourceval send_msg : fd -> ?fds:fd list -> ?dst:Unix.sockaddr -> Cstruct.t list -> int

send_msg socket bufs is like writev socket bufs, but also allows setting the destination address (for unconnected sockets) and attaching FDs (for Unix-domain sockets).

Sourceval recv_msg : fd -> Cstruct.t list -> Uring.Sockaddr.t * int

recv_msg socket bufs is like readv socket bufs but also returns the address of the sender.

Sourceval recv_msg_with_fds : sw:Eio.Std.Switch.t -> max_fds:int -> fd -> Cstruct.t list -> Uring.Sockaddr.t * int * fd list

recv_msg_with_fds is like recv_msg but also allows receiving up to max_fds file descriptors (sent using SCM_RIGHTS over a Unix domain socket).

Sourceval setsockopt : fd -> 'a Eio.Net.Sockopt.t -> 'a -> unit

setsockopt fd opt v sets socket option opt to value v on file descriptor fd.

Sourceval getsockopt : fd -> 'a Eio.Net.Sockopt.t -> 'a

getsockopt fd opt gets the value of socket option opt on file descriptor fd.

Randomness

Sourceval getrandom : Cstruct.t -> unit

getrandom buf fills buf with random bytes.

It uses Linux's getrandom call, which is like reading from /dev/urandom except that it will block (the whole domain) if used at early boot when the random system hasn't been initialised yet.

DNS functions

Sourceval getaddrinfo : service:string -> string -> Eio.Net.Sockaddr.t list

getaddrinfo host returns a list of IP addresses for host. host is either a domain name or an ipaddress.

Processes

Sourcemodule Process : sig ... end