module Handle:sig
..end
Uwt.Handle.t
is the base type for all libuv handle types.
type
t
val close : t -> Int_result.unit
Handles are closed automatically, if they are not longer referenced from
the OCaml heap. Nevertheless, you should nearly always close them with
Uwt.Handle.close
, because:
However, it's safe to write code in this manner:
let s = Uwt.Tcp.init () in
let c = Uwt.Tcp.init () in
Uwt.Tcp.nodelay s false;
Uwt.Tcp.simultaneous_accepts true;
if foobar () then (* no file descriptor yet assigned, no need to worry
about exceptions inside foobar,... *)
Lwt.return_unit (* no need to close *)
else
...
If you want - for whatever reason - keep a file descriptor open for the whole lifetime of your process, remember to keep a reference to its handle.
val close_noerr : t -> unit
val close_wait : t -> unit Lwt.t
Prefer Uwt.Handle.close
or Uwt.Handle.close_noerr
to Uwt.Handle.close_wait
. Uwt.Handle.close
or
Uwt.Handle.close_noerr
return immediately (there are no useful error
messages, beside perhaps a notice, that you've already closed that
handle).
Uwt.Handle.close_wait
is only useful, if you intend to wait until all
concurrent write and read threads related to this handle are
canceled.
val is_active : t -> bool
Returns non-zero if the handle is active, zero if it's inactive. What "active" means depends on the type of handle:
Async.t
handle is always active and cannot be deactivated,
except by closing it with uv_close().Pipe.t
, Tcp.t
, Udp.t
, etc. handle - basically any
handle that deals with i/o - is active when it is doing something
that involves i/o, like reading, writing, connecting, accepting
new connections, etc.Rule of thumb: if a handle of type Uwt.Foo.t
has a
uv_foo_start() function, then it's active from the moment that
function is called. Likewise, uv_foo_stop() deactivates the
handle again.
val ref' : t -> unit
Reference the given handle. References are idempotent, that is, if a handle is already referenced calling this function again will have no effect.
val unref : t -> unit
Un-reference the given handle. References are idempotent, that is, if a handle is not referenced calling this function again will have no effect.
val has_ref : t -> bool
Returns non-zero if the handle is referenced, zero otherwise.