module type Monad_io_t =sig
..end
This module implements monadic computations
using Duppy.Io
. It can be used to create
computations that read or write from a socket,
and also to redirect a computation in a different
queue with a new priority.
type
socket
module Io:Duppy.Io_t
with type socket = socket
type ('a, 'b)
handler = {
|
scheduler : |
|
socket : |
|
mutable data : |
|
on_error : |
A handler for this module
is a record that contains the
required elements. In particular,
on_error
is a function that transforms
an error raised by Duppy.Io
to a reply
used to terminate the computation.
data
is an internal data buffer. It should
be initialized with ""
. It contains the
remaining data that was received when
using read
. If an error occured,
data
contain data read before the
error.
val exec : ?delay:float ->
priority:'a ->
('a, 'b) handler ->
('c, 'b) Duppy.Monad.t -> ('c, 'b) Duppy.Monad.t
exec ?delay ~priority h f
redirects computation
f
into a new queue with priority priority
and
delay delay
(0.
by default).
It can be used to redirect a computation that
has to run under a different priority. For instance,
a computation that reads from a socket is generally
not blocking because the function is executed
only when some data is available for reading.
However, if the data that is read needs to be processed
by a computation that can be blocking, then one may
use exec
to redirect this computation into an
appropriate queue.
val delay : priority:'a ->
('a, 'b) handler -> float -> (unit, 'b) Duppy.Monad.t
delay ~priority h d
creates a computation that returns
unit
after delay d
in seconds.
val read : ?timeout:float ->
priority:'a ->
marker:Io.marker ->
('a, 'b) handler -> (string, 'b) Duppy.Monad.t
read ?timeout ~priority ~marker h
creates a
computation that reads from h.socket
and returns the first string split
according to marker
. This function
can be used to create a computation that
reads data from a socket. timeout
parameter
forces the computation to return an error if
nothing has been read for more than timeout
seconds. Default: wait forever.
val read_all : ?timeout:float ->
priority:'a ->
'a Duppy.scheduler ->
Io.socket ->
(string, string * Io.failure) Duppy.Monad.t
read_all ?timeout ~priority s sock
creates a
computation that reads all data from sock
and returns it. Raised value contains data
read before an error occured.
val write : ?timeout:float ->
priority:'a ->
('a, 'b) handler ->
Stdlib.Bytes.t -> (unit, 'b) Duppy.Monad.t
write ?timeout ~priority h s
creates a computation
that writes string s
to h.socket
. This
function can be used to create a computation
that sends data to a socket. timeout
parameter
forces the computation to return an error if
nothing has been written for more than timeout
seconds. Default: wait forever.
val write_bigarray : ?timeout:float ->
priority:'a ->
('a, 'b) handler ->
Io.bigarray -> (unit, 'b) Duppy.Monad.t
write_bigarray ?timeout ~priority h ba
creates a computation
that writes data from ba
to h.socket
. This function
can to create a computation that writes data to a socket.