mirror of
https://github.com/c-cube/nanoev.git
synced 2025-12-05 19:00:35 -05:00
14 lines
8.3 KiB
HTML
14 lines
8.3 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Nanoev_posix (nanoev-posix.Nanoev_posix)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.0.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../../index.html">Index</a> » <a href="../index.html">nanoev-posix</a> » Nanoev_posix</nav><header class="odoc-preamble"><h1>Module <code><span>Nanoev_posix</span></code></h1><p>Nano event loop using Poll/Ppoll</p></header><div class="odoc-content"><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">struct</span> <span class="keyword">include</span> <a href="../../nanoev/Nanoev/index.html">Nanoev</a> <span class="keyword">end</span></span></code></summary><h2 id="summary"><a href="#summary" class="anchor"></a>Summary</h2><p>Nanoev is a small abstraction over non-blocking IO event loops offered by most operating systems (e.g kqueue on BSD/macOS, poll on posix systems, epoll on linux, completion ports on windows).</p><p>The idea is that a <code>Nanoev.t</code> encapsulates a single event loop in a reusable form, and can be used in higher-level concurrency packages or to write async IO code directly. See <code>Nanoev_unix</code> for a <code>Unix.select</code>-based implementation and <a href="#"><code>Nanoev_posix</code></a> for a <code>poll</code>-based (better) implementation.</p><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span><span> = <a href="../../nanoev/Nanoev/index.html#type-t">Nanoev.t</a></span></code></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Closed"><a href="#exception-Closed" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Closed</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Impl"><a href="#module-Impl" class="anchor"></a><code><span><span class="keyword">module</span> Impl</span><span> = <a href="../../nanoev/Nanoev/Impl/index.html">Nanoev.Impl</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-clear"><a href="#val-clear" class="anchor"></a><code><span><span class="keyword">val</span> clear : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Reset the state, similar to creating a new event loop from scratch</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wakeup_from_outside"><a href="#val-wakeup_from_outside" class="anchor"></a><code><span><span class="keyword">val</span> wakeup_from_outside : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wakeup a sleeping event loop from the outside (another thread, a signal handler, etc.). This must be thread-safe.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-step"><a href="#val-step" class="anchor"></a><code><span><span class="keyword">val</span> step : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Run one step of the event loop until something happens. This can potentially block the caller for an interdeterminate duration.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-close"><a href="#val-close" class="anchor"></a><code><span><span class="keyword">val</span> close : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Close the file descriptor and clean it up inside the event loop. Callbacks registered on this FD will be called with <code>~closed:true</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-max_fds"><a href="#val-max_fds" class="anchor"></a><code><span><span class="keyword">val</span> max_fds : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Maximum number of file descriptors that can be observed at once. This depends on the syscall underlying the event loop, as well as other system limits (see <code>ulimit -n</code> to change this limit on linux, for example).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-on_readable"><a href="#val-on_readable" class="anchor"></a><code><span><span class="keyword">val</span> on_readable :
|
||
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="type-var">'a</span> <span class="arrow">-></span></span>
|
||
<span><span class="type-var">'b</span> <span class="arrow">-></span></span>
|
||
<span><span>(<span><span class="label">closed</span>:bool <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span>
|
||
unit</span></code></div><div class="spec-doc"><p><code>on_readable nanoev fd x y f</code> registers <code>f x y</code> to be called when <code>fd</code> becomes readable. An additional <code>closed</code> parameter is passed to <code>f</code> to inform it of whether <code>fd</code> is <i>known</i> to be closed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-on_writable"><a href="#val-on_writable" class="anchor"></a><code><span><span class="keyword">val</span> on_writable :
|
||
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="type-var">'a</span> <span class="arrow">-></span></span>
|
||
<span><span class="type-var">'b</span> <span class="arrow">-></span></span>
|
||
<span><span>(<span><span class="label">closed</span>:bool <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span>
|
||
unit</span></code></div><div class="spec-doc"><p>Same as <a href="#val-on_readable"><code>on_readable</code></a> but calls <code>f</code> when the FD is writable.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-run_after_s"><a href="#val-run_after_s" class="anchor"></a><code><span><span class="keyword">val</span> run_after_s : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span>float <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>run_after_s nanoev [duration] x y f</code> registers <code>f x y</code> to be called after <code>duration</code> seconds have elapsed.</p></div></div></details></div><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create : <span>unit <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Create a new nanoev loop using <code>Iomux</code> (poll/ppoll).</p></div></div></div></body></html>
|