package luv

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Pipes.

See Child process I/O and IPC in the user guide, and uv_pipe_t — Pipe handle in libuv.

type t = [ `Pipe ] Stream.t

Binds uv_pipe_t.

Note that values of this type can also be used with functions in:

In particular, see Luv.Handle.close, Luv.Stream.accept, Luv.Stream.read_start, Luv.Stream.write.

val init : ?loop:Loop.t -> ?for_handle_passing:bool -> unit -> (t, Error.t) result

Allocates and initializes a pipe.

Binds uv_pipe_init.

The pipe is not yet connected to anything at this point. See Luv.Pipe.bind, Luv.Stream.listen, and Luv.Pipe.connect.

val open_ : t -> File.t -> (unit, Error.t) result

Wraps an existing file descriptor in a libuv pipe.

Binds uv_pipe_open.

val pipe : ?read_flags:TCP.Flag.t list -> ?write_flags:TCP.Flag.t list -> unit -> (File.t * File.t, Error.t) result

Creates a pair of connected pipes.

Binds uv_pipe. See pipe(3p).

In case of success, in the value (read_pipe, write_pipe), data written to write_pipe can be read from read_pipe.

?read_flags specifies flags for read_pipe. Likewise, ?write_flags specifies flags for write_pipe. The only possible flag at the moment is `NONBLOCK, which binds UV_NONBLOCK_PIPE. Both arguments are set to [`NONBLOCK] by default.

Requires Luv 0.5.7 and libuv 1.41.0.

Feature check: Luv.Require.(has pipe)

val bind : ?no_truncate:bool -> t -> string -> (unit, Error.t) result

Assigns a pipe a name or an address.

Binds uv_pipe_bind2. See bind(3p).

?no_truncate binds UV_PIPE_NO_TRUNCATE, which causes this function to return EINVAL rather than truncating the path, if the path is too long.

?no_truncate and Linux abstract namespace sockets require Luv 0.5.13 and libuv 1.46.0.

Feature check: Luv.Require.(has pipe_bind2)

val connect : ?no_truncate:bool -> t -> string -> ((unit, Error.t) result -> unit) -> unit

Connects to the pipe at the given name or address.

Binds uv_pipe_connect2. See connect(3p).

?no_truncate binds UV_PIPE_NO_TRUNCATE, which causes this function to return EINVAL rather than truncating the path, if the path is too long.

?no_truncate and Linux abstract namespace sockets require Luv 0.5.13 and libuv 1.46.0.

Feature check: Luv.Require.(has pipe_connect2)

val getsockname : t -> (string, Error.t) result

Retrieves the name or address assigned to the given pipe.

Binds uv_pipe_getsockname. See getsockname(3p).

val getpeername : t -> (string, Error.t) result

Retrieves the name or address of the given pipe's peer.

Binds uv_pipe_getpeername. See getpeername(3p).

val pending_instances : t -> int -> unit
val receive_handle : t -> [ `TCP of TCP.t -> (unit, Error.t) result | `Pipe of t -> (unit, Error.t) result | `None ]

Receives a file descriptor over the given pipe.

File descriptors are sent using the ~send_handle argument of Luv.Stream.write2.

On the receiving end, call Luv.Stream.read_start. When that function calls its callback, there may be file descriptors in the pipe, in addition to the ordinary data provided to the callback.

To check, call this function Luv.Pipe.receive_handle in a loop until it returns `None. Each time it returns `TCP receive or `Pipe receive, create an appropriate handle using either Luv.TCP.init or Luv.Pipe.init, and call receive handle to receive the file descriptor and associate it with handle.

module Mode : sig ... end

Constants for Luv.Pipe.chmod.

val chmod : t -> Mode.t list -> (unit, Error.t) result

Sets pipe permissions.

Binds uv_pipe_chmod.

Requires libuv 1.16.0.

Feature check: Luv.Require.(has pipe_chmod)

OCaml

Innovation. Community. Security.