package uwt
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=9e653a9fc7a13c5435a58780ddf02ff15c8ff92f63f6ff4406b1d312e3060807
md5=549517d3e9bcf5533097e4c83f891e2c
doc/uwt.async/Uwt/Timer/index.html
Module Uwt.Timer
Timer handles are used to schedule callbacks to be called in the future.
include module type of Handle with type t := t
val close : t -> Int_result.unitHandles are closed automatically, if they are not longer referenced from the OCaml heap. Nevertheless, you should nearly always close them with close, because:
- if they wrap a file descriptor, you will sooner or later run out of file descriptors. The OCaml garbage collector doesn't give any guarantee, when orphaned memory blocks are removed.
- you might have registered some repeatedly called action (e.g. timeout, read_start,...), that prevent that all references get removed from the OCaml heap.
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 -> unitPrefer close or close_noerr to close_wait. close or close_noerr return immediately (there are no useful error messages, beside perhaps a notice, that you've already closed that 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 -> boolReturns non-zero if the handle is active, zero if it's inactive. What "active" means depends on the type of handle:
- A
Async.thandle is always active and cannot be deactivated, except by closing it with uv_close().
- A
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 -> unitReference 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 -> unitUn-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 -> boolReturns non-zero if the handle is referenced, zero otherwise.
val sleep : int -> unit Lwt.tsleep d is a thread that remains suspended for d milliseconds and then terminates.
Timers, that are executed only once (repeat=0), are automatically closed. After their callback have been executed, their handles are invalid. Call close to stop a repeating timer