mirror of
https://github.com/c-cube/linol.git
synced 2025-12-06 03:05:31 -05:00
76 lines
171 KiB
HTML
76 lines
171 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Lwt_unix (lwt.Lwt_unix)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.3"/><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">lwt</a> » Lwt_unix</nav><header class="odoc-preamble"><h1>Module <code><span>Lwt_unix</span></code></h1><p>Cooperative system calls</p></header><nav class="odoc-toc"><ul><li><a href="#sleeping">Sleeping</a></li><li><a href="#operations-on-file-descriptors">Operations on file-descriptors</a></li><li><a href="#process-handling">Process handling</a></li><li><a href="#basic-file-input/output">Basic file input/output</a></li><li><a href="#seeking-and-truncating">Seeking and truncating</a></li><li><a href="#syncing">Syncing</a></li><li><a href="#file-status">File status</a></li><li><a href="#file-operations-on-large-files">File operations on large files</a></li><li><a href="#operations-on-file-names">Operations on file names</a></li><li><a href="#file-permissions-and-ownership">File permissions and ownership</a></li><li><a href="#operations-on-file-descriptors_2">Operations on file descriptors</a></li><li><a href="#directories">Directories</a></li><li><a href="#pipes-and-redirections">Pipes and redirections</a></li><li><a href="#symbolic-links">Symbolic links</a></li><li><a href="#locking">Locking</a></li><li><a href="#user-id,-group-id">User id, group id</a></li><li><a href="#signals">Signals</a></li><li><a href="#sockets">Sockets</a><ul><li><a href="#socket-options">Socket options</a></li><li><a href="#multicast-functions">Multicast functions</a></li></ul></li><li><a href="#host-and-protocol-databases">Host and protocol databases</a></li><li><a href="#terminal-interface">Terminal interface</a></li><li><a href="#configuration-(deprecated)">Configuration (deprecated)</a></li><li><a href="#low-level-interaction">Low-level interaction</a></li><li><a href="#notifications">Notifications</a></li><li><a href="#system-threads-pool">System threads pool</a></li><li><a href="#cpus">CPUs</a></li><li><a href="#versioned-interfaces">Versioned interfaces</a></li></ul></nav><div class="odoc-content"><p>This modules maps system calls, like those of the standard library's <a href="../../ocaml/Unix/index.html"><code>Unix</code></a> module, to cooperative ones, which will not block the program.</p><p>The semantics of all operations is the following: if the action (for example reading from a <b>file descriptor</b>) can be performed immediately, it is performed and returns an already resolved promise, otherwise it returns a pending promise which is resolved when the operation completes.</p><p>Most operations on sockets and pipes (on Windows it is only sockets) are <b>cancelable</b>, meaning you can cancel them with <a href="../Lwt/index.html#val-cancel"><code>Lwt.cancel</code></a>. For example if you want to read something from a <b>file descriptor</b> with a timeout, you can cancel the action after the timeout and the reading will not be performed if not already done.</p><p>For example, consider that you have two sockets <code>sock1</code> and <code>sock2</code>. You want to read something from <code>sock1</code> or exclusively from <code>sock2</code> and fail with an exception if a timeout of 1 second expires, without reading anything from <code>sock1</code> and <code>sock2</code>, even if they become readable in the future.</p><p>Then you can do:</p><pre class="language-ocaml"><code>Lwt.pick
|
||
[Lwt_unix.timeout 1.0;
|
||
read sock1 buf1 ofs1 len1;
|
||
read sock2 buf2 ofs2 len2]</code></pre><p>In this case, it is guaranteed that exactly one of the three operations will complete, and the others will be cancelled.</p><div class="odoc-spec"><div class="spec value anchored" id="val-handle_unix_error"><a href="#val-handle_unix_error" class="anchor"></a><code><span><span class="keyword">val</span> handle_unix_error : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Same as <a href="../../ocaml/Unix/index.html#val-handle_unix_error"><code>Unix.handle_unix_error</code></a> but catches lwt-level exceptions</p></div></div><h3 id="sleeping"><a href="#sleeping" class="anchor"></a>Sleeping</h3><div class="odoc-spec"><div class="spec value anchored" id="val-sleep"><a href="#val-sleep" class="anchor"></a><code><span><span class="keyword">val</span> sleep : <span>float <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>sleep d</code> is a promise that remains in a pending state for <code>d</code> seconds after which it is resolved with value <code>()</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-yield"><a href="#val-yield" class="anchor"></a><code><span><span class="keyword">val</span> yield : <span>unit <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>yield ()</code> is a promise in a pending state. It resumes itself as soon as possible and resolves with value <code>()</code>.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Since 5.5.0 <code>yield</code> is deprecated. Use the more general <a href="../Lwt/index.html#val-pause"><code>Lwt.pause</code></a> instead. See <a href="../Lwt_main/index.html#val-yield"><code>Lwt_main.yield</code></a> for additional details.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-auto_yield"><a href="#val-auto_yield" class="anchor"></a><code><span><span class="keyword">val</span> auto_yield : <span>float <span class="arrow">-></span></span> <span>unit <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Since 5.5.0. Use <a href="#val-auto_pause"><code>auto_pause</code></a> instead.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-auto_pause"><a href="#val-auto_pause" class="anchor"></a><code><span><span class="keyword">val</span> auto_pause : <span>float <span class="arrow">-></span></span> <span>unit <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>auto_pause timeout</code> returns a function <code>f</code>, and <code>f ()</code> has the following behavior:</p><ul><li>If it has been more than <code>timeout</code> seconds since the last time <code>f ()</code> behaved like <a href="../Lwt/index.html#val-pause"><code>Lwt.pause</code></a>, <code>f ()</code> calls <a href="../Lwt/index.html#val-pause"><code>Lwt.pause</code></a>.</li><li>Otherwise, if it has been less than <code>timeout</code> seconds, <code>f ()</code> behaves like <a href="../Lwt/index.html#val-return_unit"><code>Lwt.return_unit</code></a>, i.e. it does not yield.</li></ul></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Timeout"><a href="#exception-Timeout" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Timeout</span></span></code></div><div class="spec-doc"><p>Exception raised by timeout operations</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-timeout"><a href="#val-timeout" class="anchor"></a><code><span><span class="keyword">val</span> timeout : <span>float <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>timeout d</code> is a promise that remains pending for <code>d</code> seconds and then is rejected with <a href="#exception-Timeout"><code>Timeout</code></a>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Timeout"><code>Timeout</code></a> <p>The promise <code>timeout d</code> is rejected with <a href="#exception-Timeout"><code>Timeout</code></a> unless it is cancelled.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_timeout"><a href="#val-with_timeout" class="anchor"></a><code><span><span class="keyword">val</span> with_timeout : <span>float <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>with_timeout d f</code> is a short-hand for:</p><pre class="language-ocaml"><code>Lwt.pick [Lwt_unix.timeout d; f ()]</code></pre><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Timeout"><code>Timeout</code></a> <p>The promise <code>with_timeout d f</code> raises <a href="#exception-Timeout"><code>Timeout</code></a> if the promise returned by <code>f ()</code> takes more than <code>d</code> seconds to resolve.</p></li></ul></div></div><h3 id="operations-on-file-descriptors"><a href="#operations-on-file-descriptors" class="anchor"></a>Operations on file-descriptors</h3><div class="odoc-spec"><div class="spec type anchored" id="type-file_descr"><a href="#type-file_descr" class="anchor"></a><code><span><span class="keyword">type</span> file_descr</span></code></div><div class="spec-doc"><p>The abstract type for <b>file descriptor</b>s. A Lwt <b>file descriptor</b> is a pair of a unix <b>file descriptor</b> (of type <a href="../../ocaml/Unix/index.html#type-file_descr"><code>Unix.file_descr</code></a>) and a <b>state</b>.</p><p>A <b>file descriptor</b> may be:</p><ul><li><b>opened</b>, in which case it is fully usable</li><li><b>closed</b> or <b>aborted</b>, in which case it is no longer usable</li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-state"><a href="#type-state" class="anchor"></a><code><span><span class="keyword">type</span> state</span><span> = </span></code><ol><li id="type-state.Opened" class="def variant constructor anchored"><a href="#type-state.Opened" class="anchor"></a><code><span>| </span><span><span class="constructor">Opened</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The <b>file descriptor</b> is opened</p><span class="comment-delim">*)</span></div></li><li id="type-state.Closed" class="def variant constructor anchored"><a href="#type-state.Closed" class="anchor"></a><code><span>| </span><span><span class="constructor">Closed</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The <b>file descriptor</b> has been closed by <a href="#val-close"><code>close</code></a>. It must not be used for any operation.</p><span class="comment-delim">*)</span></div></li><li id="type-state.Aborted" class="def variant constructor anchored"><a href="#type-state.Aborted" class="anchor"></a><code><span>| </span><span><span class="constructor">Aborted</span> <span class="keyword">of</span> exn</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The <b>file descriptor</b> has been aborted, the only operation possible is <a href="#val-close"><code>close</code></a>, all others will fail.</p><span class="comment-delim">*)</span></div></li></ol></div><div class="spec-doc"><p>State of a <b>file descriptor</b></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-state"><a href="#val-state" class="anchor"></a><code><span><span class="keyword">val</span> state : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <a href="#type-state">state</a></span></code></div><div class="spec-doc"><p><code>state fd</code> returns the <a href="#type-state"><code>state</code></a> of <code>fd</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-unix_file_descr"><a href="#val-unix_file_descr" class="anchor"></a><code><span><span class="keyword">val</span> unix_file_descr : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a></span></code></div><div class="spec-doc"><p>Returns the underlying unix <b>file descriptor</b>. It always succeeds, even if the <b>file descriptor</b>'s state is not <code>Opened</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_unix_file_descr"><a href="#val-of_unix_file_descr" class="anchor"></a><code><span><span class="keyword">val</span> of_unix_file_descr :
|
||
<span><span class="optlabel">?blocking</span>:bool <span class="arrow">-></span></span>
|
||
<span><span class="optlabel">?set_flags</span>:bool <span class="arrow">-></span></span>
|
||
<span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> <span class="arrow">-></span></span>
|
||
<a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p>Wraps a <code>Unix</code> file descriptor <code>fd</code> in an Lwt <a href="#type-file_descr"><code>file_descr</code></a> <code>fd'</code>.</p><p><code>~blocking</code> controls the <em>internal</em> strategy Lwt uses to perform I/O on the underlying <code>fd</code>. Regardless of <code>~blocking</code>, at the API level, <code>Lwt_unix.read</code>, <code>Lwt_unix.write</code>, etc. on <code>fd'</code> <em>always</em> block the Lwt promise, but <em>never</em> block the whole process. However, for performance reasons, it is important that <code>~blocking</code> match the actual blocking mode of <code>fd</code>.</p><p>If <code>~blocking</code> is not specified, <code>of_unix_file_descr</code> chooses non-blocking mode for Unix sockets, Unix pipes, and Windows sockets, and blocking mode for everything else. <b>Note:</b> not specifying <code>~blocking</code> causes <code>fstat</code> to be lazily called on <code>fd</code>, the first time your code performs I/O on <code>fd'</code>. This <code>fstat</code> call can be expensive, so if you use <code>of_unix_file_descr</code> a lot, be sure to specify <code>~blocking</code> explicitly.</p><p><code>of_unix_file_descr</code> runs a system call to set the specified or chosen blocking mode on the underlying <code>fd</code>.</p><p>To prevent <code>of_unix_file_descr</code> from running this system call, you can pass <code>~set_flags:false</code>. Note that, in this case, if <code>~blocking</code>, whether passed explicitly or chosen by Lwt, does not match the true blocking mode of the underlying <code>fd</code>, I/O on <code>fd'</code> will suffer performance degradation.</p><p>Note that <code>~set_flags</code> is effectively always <code>false</code> if running on Windows and <code>fd</code> is not a socket.</p><p>Generally, non-blocking I/O is faster: for blocking I/O, Lwt typically has to run system calls in worker threads to avoid blocking the process. See your system documentation for whether particular kinds of file descriptors support non-blocking I/O.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-blocking"><a href="#val-blocking" class="anchor"></a><code><span><span class="keyword">val</span> blocking : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bool <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>blocking fd</code> indicates whether Lwt is internally using blocking or non-blocking I/O with <code>fd</code>.</p><p>Note that this may differ from the blocking mode of the underlying Unix file descriptor (i.e. <code>unix_file_descr fd</code>).</p><p>See <a href="#val-of_unix_file_descr"><code>of_unix_file_descr</code></a> for details.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_blocking"><a href="#val-set_blocking" class="anchor"></a><code><span><span class="keyword">val</span> set_blocking : <span><span class="optlabel">?set_flags</span>:bool <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bool <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>set_blocking fd b</code> causes Lwt to internally use blocking or non-blocking I/O with <code>fd</code>, according to the value of <code>b</code>.</p><p>If <code>~set_flags</code> is <code>true</code> (the default), Lwt also makes a system call to set the underlying file descriptor's blocking mode to match. Otherwise, <code>set_blocking</code> is only informational for Lwt.</p><p>It is important that the underlying file descriptor actually have the same blocking mode as that indicated by <code>b</code>.</p><p>See <a href="#val-of_unix_file_descr"><code>of_unix_file_descr</code></a> for details.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-abort"><a href="#val-abort" class="anchor"></a><code><span><span class="keyword">val</span> abort : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>exn <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>abort fd exn</code> makes all current and further uses of the file descriptor fail with the given exception. This put the <b>file descriptor</b> into the <code>Aborted</code> state.</p><p>If the <b>file descriptor</b> is closed, this does nothing, if it is aborted, this replace the abort exception by <code>exn</code>.</p><p>Note that this only works for reading and writing operations on file descriptors supporting non-blocking mode.</p></div></div><h3 id="process-handling"><a href="#process-handling" class="anchor"></a>Process handling</h3><div class="odoc-spec"><div class="spec value anchored" id="val-fork"><a href="#val-fork" class="anchor"></a><code><span><span class="keyword">val</span> fork : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p><code>fork ()</code> does the same as <a href="../../ocaml/Unix/index.html#val-fork"><code>Unix.fork</code></a>. You must use this function instead of <a href="../../ocaml/Unix/index.html#val-fork"><code>Unix.fork</code></a> when you want to use Lwt in the child process, even if you have not started using Lwt before the fork.</p><p>Notes:</p><ul><li>In the child process all pending <code>Lwt_unix</code> I/O jobs are abandoned. This may cause the child's copy of their associated promises to remain forever pending.</li><li>If you are going to use Lwt in the parent and the child, it is a good idea to call <a href="../Lwt_io/index.html#val-flush_all"><code>Lwt_io.flush_all</code></a> before callling <a href="#val-fork"><code>fork</code></a> to avoid double-flush.</li><li>Otherwise, if you will not use Lwt in the child, call <a href="../Lwt_main/Exit_hooks/index.html#val-remove_all"><code>Lwt_main.Exit_hooks.remove_all</code></a> to avoid Lwt calling <a href="../Lwt_main/index.html#val-run"><code>Lwt_main.run</code></a> during process exit.</li><li>None of the above is necessary if you intend to call <code>exec</code>. Indeed, in that case, it is not even necessary to use <code>Lwt_unix.fork</code>. You can use <a href="../../ocaml/Unix/index.html#val-fork"><code>Unix.fork</code></a>.</li><li>To abandon some more promises, see <a href="../Lwt_main/index.html#val-abandon_yielded_and_paused"><code>Lwt_main.abandon_yielded_and_paused</code></a>.</li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-process_status"><a href="#type-process_status" class="anchor"></a><code><span><span class="keyword">type</span> process_status</span><span> = <a href="../../ocaml/Unix/index.html#type-process_status">Unix.process_status</a></span><span> = </span></code><ol><li id="type-process_status.WEXITED" class="def variant constructor anchored"><a href="#type-process_status.WEXITED" class="anchor"></a><code><span>| </span><span><span class="constructor">WEXITED</span> <span class="keyword">of</span> int</span></code></li><li id="type-process_status.WSIGNALED" class="def variant constructor anchored"><a href="#type-process_status.WSIGNALED" class="anchor"></a><code><span>| </span><span><span class="constructor">WSIGNALED</span> <span class="keyword">of</span> int</span></code></li><li id="type-process_status.WSTOPPED" class="def variant constructor anchored"><a href="#type-process_status.WSTOPPED" class="anchor"></a><code><span>| </span><span><span class="constructor">WSTOPPED</span> <span class="keyword">of</span> int</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-wait_flag"><a href="#type-wait_flag" class="anchor"></a><code><span><span class="keyword">type</span> wait_flag</span><span> = <a href="../../ocaml/Unix/index.html#type-wait_flag">Unix.wait_flag</a></span><span> = </span></code><ol><li id="type-wait_flag.WNOHANG" class="def variant constructor anchored"><a href="#type-wait_flag.WNOHANG" class="anchor"></a><code><span>| </span><span><span class="constructor">WNOHANG</span></span></code></li><li id="type-wait_flag.WUNTRACED" class="def variant constructor anchored"><a href="#type-wait_flag.WUNTRACED" class="anchor"></a><code><span>| </span><span><span class="constructor">WUNTRACED</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait"><a href="#val-wait" class="anchor"></a><code><span><span class="keyword">val</span> wait : <span>unit <span class="arrow">-></span></span> <span><span>(int * <a href="#type-process_status">process_status</a>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-wait"><code>Unix.wait</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-waitpid"><a href="#val-waitpid" class="anchor"></a><code><span><span class="keyword">val</span> waitpid : <span><span><a href="#type-wait_flag">wait_flag</a> list</span> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span><span>(int * <a href="#type-process_status">process_status</a>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>A promise-returning analog to <a href="../../ocaml/Unix/index.html#val-waitpid"><code>Unix.waitpid</code></a>. This call is non-blocking on Unix-like systems, but is always blocking on Windows.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-resource_usage"><a href="#type-resource_usage" class="anchor"></a><code><span><span class="keyword">type</span> resource_usage</span><span> = </span><span>{</span></code><ol><li id="type-resource_usage.ru_utime" class="def record field anchored"><a href="#type-resource_usage.ru_utime" class="anchor"></a><code><span>ru_utime : float;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>User time used</p><span class="comment-delim">*)</span></div></li><li id="type-resource_usage.ru_stime" class="def record field anchored"><a href="#type-resource_usage.ru_stime" class="anchor"></a><code><span>ru_stime : float;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>System time used</p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Resource usages</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait4"><a href="#val-wait4" class="anchor"></a><code><span><span class="keyword">val</span> wait4 :
|
||
<span><span><a href="#type-wait_flag">wait_flag</a> list</span> <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span><span>(int * <a href="#type-process_status">process_status</a> * <a href="#type-resource_usage">resource_usage</a>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>wait4 flags pid</code> returns <code>(pid, status, rusage)</code> where <code>(pid, status)</code> is the same result as <code>Unix.waitpid flags pid</code>, and <code>rusage</code> contains accounting information about the child.</p><p>On windows it will always returns <code>{ utime = 0.0; stime = 0.0 }</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_count"><a href="#val-wait_count" class="anchor"></a><code><span><span class="keyword">val</span> wait_count : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Returns the number of promises waiting for a child process to terminate.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-system"><a href="#val-system" class="anchor"></a><code><span><span class="keyword">val</span> system : <span>string <span class="arrow">-></span></span> <span><a href="#type-process_status">process_status</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Executes the given command, waits until it terminates, and return its termination status. The string is interpreted by the shell <code>/bin/sh</code> on Unix and <code>cmd.exe</code> on Windows. The result <code>WEXITED 127</code> indicates that the shell couldn't be executed.</p></div></div><h3 id="basic-file-input/output"><a href="#basic-file-input/output" class="anchor"></a>Basic file input/output</h3><div class="odoc-spec"><div class="spec value anchored" id="val-stdin"><a href="#val-stdin" class="anchor"></a><code><span><span class="keyword">val</span> stdin : <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p>The <b>file descriptor</b> for standard input.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-stdout"><a href="#val-stdout" class="anchor"></a><code><span><span class="keyword">val</span> stdout : <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p>The <b>file descriptor</b> for standard output.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-stderr"><a href="#val-stderr" class="anchor"></a><code><span><span class="keyword">val</span> stderr : <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p>The <b>file descriptor</b> for standard error.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-file_perm"><a href="#type-file_perm" class="anchor"></a><code><span><span class="keyword">type</span> file_perm</span><span> = <a href="../../ocaml/Unix/index.html#type-file_perm">Unix.file_perm</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-open_flag"><a href="#type-open_flag" class="anchor"></a><code><span><span class="keyword">type</span> open_flag</span><span> = <a href="../../ocaml/Unix/index.html#type-open_flag">Unix.open_flag</a></span><span> = </span></code><ol><li id="type-open_flag.O_RDONLY" class="def variant constructor anchored"><a href="#type-open_flag.O_RDONLY" class="anchor"></a><code><span>| </span><span><span class="constructor">O_RDONLY</span></span></code></li><li id="type-open_flag.O_WRONLY" class="def variant constructor anchored"><a href="#type-open_flag.O_WRONLY" class="anchor"></a><code><span>| </span><span><span class="constructor">O_WRONLY</span></span></code></li><li id="type-open_flag.O_RDWR" class="def variant constructor anchored"><a href="#type-open_flag.O_RDWR" class="anchor"></a><code><span>| </span><span><span class="constructor">O_RDWR</span></span></code></li><li id="type-open_flag.O_NONBLOCK" class="def variant constructor anchored"><a href="#type-open_flag.O_NONBLOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">O_NONBLOCK</span></span></code></li><li id="type-open_flag.O_APPEND" class="def variant constructor anchored"><a href="#type-open_flag.O_APPEND" class="anchor"></a><code><span>| </span><span><span class="constructor">O_APPEND</span></span></code></li><li id="type-open_flag.O_CREAT" class="def variant constructor anchored"><a href="#type-open_flag.O_CREAT" class="anchor"></a><code><span>| </span><span><span class="constructor">O_CREAT</span></span></code></li><li id="type-open_flag.O_TRUNC" class="def variant constructor anchored"><a href="#type-open_flag.O_TRUNC" class="anchor"></a><code><span>| </span><span><span class="constructor">O_TRUNC</span></span></code></li><li id="type-open_flag.O_EXCL" class="def variant constructor anchored"><a href="#type-open_flag.O_EXCL" class="anchor"></a><code><span>| </span><span><span class="constructor">O_EXCL</span></span></code></li><li id="type-open_flag.O_NOCTTY" class="def variant constructor anchored"><a href="#type-open_flag.O_NOCTTY" class="anchor"></a><code><span>| </span><span><span class="constructor">O_NOCTTY</span></span></code></li><li id="type-open_flag.O_DSYNC" class="def variant constructor anchored"><a href="#type-open_flag.O_DSYNC" class="anchor"></a><code><span>| </span><span><span class="constructor">O_DSYNC</span></span></code></li><li id="type-open_flag.O_SYNC" class="def variant constructor anchored"><a href="#type-open_flag.O_SYNC" class="anchor"></a><code><span>| </span><span><span class="constructor">O_SYNC</span></span></code></li><li id="type-open_flag.O_RSYNC" class="def variant constructor anchored"><a href="#type-open_flag.O_RSYNC" class="anchor"></a><code><span>| </span><span><span class="constructor">O_RSYNC</span></span></code></li><li id="type-open_flag.O_SHARE_DELETE" class="def variant constructor anchored"><a href="#type-open_flag.O_SHARE_DELETE" class="anchor"></a><code><span>| </span><span><span class="constructor">O_SHARE_DELETE</span></span></code></li><li id="type-open_flag.O_CLOEXEC" class="def variant constructor anchored"><a href="#type-open_flag.O_CLOEXEC" class="anchor"></a><code><span>| </span><span><span class="constructor">O_CLOEXEC</span></span></code></li><li id="type-open_flag.O_KEEPEXEC" class="def variant constructor anchored"><a href="#type-open_flag.O_KEEPEXEC" class="anchor"></a><code><span>| </span><span><span class="constructor">O_KEEPEXEC</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-openfile"><a href="#val-openfile" class="anchor"></a><code><span><span class="keyword">val</span> openfile : <span>string <span class="arrow">-></span></span> <span><span><a href="#type-open_flag">open_flag</a> list</span> <span class="arrow">-></span></span> <span><a href="#type-file_perm">file_perm</a> <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-openfile"><code>Unix.openfile</code></a>.</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-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Close a <b>file descriptor</b>. This close the underlying unix <b>file descriptor</b> and set its state to <code>Closed</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-read"><a href="#val-read" class="anchor"></a><code><span><span class="keyword">val</span> read : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bytes <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>read fd buf ofs len</code> reads up to <code>len</code> bytes from <code>fd</code>, and writes them to <code>buf</code>, starting at offset <code>ofs</code>. The function immediately evaluates to an Lwt promise which waits for the operation to complete. If it completes successfully, the promise resolves to the number of bytes actually read, or zero if the end of file has been reached.</p><p>Note that the Lwt promise waits for data (or end of file) even if the underlying file descriptor is in non-blocking mode. See <a href="#val-of_unix_file_descr"><code>of_unix_file_descr</code></a> for a discussion of non-blocking I/O and Lwt.</p><p>If Lwt is using blocking I/O on <code>fd</code>, <code>read</code> writes data into a temporary buffer, then copies it into <code>buf</code>.</p><p>The promise can be rejected with any exception that can be raised by <a href="../../ocaml/Unix/index.html#val-read"><code>Unix.read</code></a>, except <code>Unix.Unix_error Unix.EAGAIN</code>, <code>Unix.Unix_error Unix.EWOULDBLOCK</code> or <code>Unix.Unix_error Unix.EINTR</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pread"><a href="#val-pread" class="anchor"></a><code><span><span class="keyword">val</span> pread : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bytes <span class="arrow">-></span></span> <span><span class="label">file_offset</span>:int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>pread fd buf ~file_offset ofs len</code> on file descriptors allowing seek, reads up to <code>len</code> bytes from <code>fd</code> at offset <code>file_offset</code> from the beginning of the file, and writes them to <code>buf</code>, starting at offset <code>ofs</code>.</p><p>On Unix systems, the file descriptor position is unaffected. On Windows it is changed to be just after the last read position.</p><p>The promise can be rejected with any exception that can be raised by <code>read</code> or <code>lseek</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-write"><a href="#val-write" class="anchor"></a><code><span><span class="keyword">val</span> write : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bytes <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>write fd buf ofs len</code> writes up to <code>len</code> bytes to <code>fd</code> from <code>buf</code>, starting at buffer offset <code>ofs</code>. The function immediately evaluates to an Lwt promise which waits for the operation to complete. If the operation completes successfully, the promise resolves to the number of bytes actually written, which may be less than <code>len</code>.</p><p>Note that the Lwt promise waits to write even if the underlying file descriptor is in non-blocking mode. See <a href="#val-of_unix_file_descr"><code>of_unix_file_descr</code></a> for a discussion of non-blocking I/O and Lwt.</p><p>If Lwt is using blocking I/O on <code>fd</code>, <code>buf</code> is copied before writing.</p><p>The promise can be rejected with any exception that can be raised by <a href="../../ocaml/Unix/index.html#val-single_write"><code>Unix.single_write</code></a>, except <code>Unix.Unix_error Unix.EAGAIN</code>, <code>Unix.Unix_error Unix.EWOULDBLOCK</code> or <code>Unix.Unix_error Unix.EINTR</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pwrite"><a href="#val-pwrite" class="anchor"></a><code><span><span class="keyword">val</span> pwrite : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bytes <span class="arrow">-></span></span> <span><span class="label">file_offset</span>:int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>pwrite fd buf ~file_offset ofs len</code> on file descriptors allowing seek, writes up to <code>len</code> bytes to <code>fd</code> from <code>buf</code>, starting at buffer offset <code>ofs</code>. The data is written at offset <code>file_offset</code> from the beginning of <code>fd</code>.</p><p>On Unix systems, the file descriptor position is unaffected. On Windows it is changed to be just after the last written position.</p><p>The promise can be rejected with any exception that can be raised by <code>write</code> or <code>lseek</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-write_string"><a href="#val-write_string" class="anchor"></a><code><span><span class="keyword">val</span> write_string : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>See <a href="#val-write"><code>write</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pwrite_string"><a href="#val-pwrite_string" class="anchor"></a><code><span><span class="keyword">val</span> pwrite_string :
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span>string <span class="arrow">-></span></span>
|
||
<span><span class="label">file_offset</span>:int <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>See <a href="#val-pwrite"><code>pwrite</code></a>.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-IO_vectors"><a href="#module-IO_vectors" class="anchor"></a><code><span><span class="keyword">module</span> <a href="IO_vectors/index.html">IO_vectors</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Sequences of buffer slices for <a href="#val-writev"><code>writev</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-readv"><a href="#val-readv" class="anchor"></a><code><span><span class="keyword">val</span> readv : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="IO_vectors/index.html#type-t">IO_vectors.t</a> <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>readv fd vs</code> reads bytes from <code>fd</code> into the buffer slices <code>vs</code>. If the operation completes successfully, the resulting promise resolves to the number of bytes read.</p><p>Data is always read directly into <code>Bigarray</code> slices. If the Unix file descriptor underlying <code>fd</code> is in non-blocking mode, data is also read directly into <code>bytes</code> slices. Otherwise, data for <code>bytes</code> slices is first read into temporary buffers, then copied.</p><p>Note that the returned Lwt promise is pending until failure or a successful read, even if the underlying file descriptor is in non-blocking mode. See <a href="#val-of_unix_file_descr"><code>of_unix_file_descr</code></a> for a discussion of non-blocking I/O and Lwt.</p><p>If <a href="IO_vectors/index.html#val-system_limit"><code>IO_vectors.system_limit</code></a> is <code>Some n</code> and the count of slices in <code>vs</code> exceeds <code>n</code>, then <code>Lwt_unix.readv</code> reads only into the first <code>n</code> slices of <code>vs</code>.</p><p>Not implemented on Windows. It should be possible to implement, upon request, for Windows sockets only.</p><p>See <a href="http://man7.org/linux/man-pages/man3/readv.3p.html"><code>readv(3p)</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.7.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-writev"><a href="#val-writev" class="anchor"></a><code><span><span class="keyword">val</span> writev : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="IO_vectors/index.html#type-t">IO_vectors.t</a> <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>writev fd vs</code> writes the bytes in the buffer slices <code>vs</code> to the file descriptor <code>fd</code>. If the operation completes successfully, the resulting promise resolves to the number of bytes written.</p><p>If the Unix file descriptor underlying <code>fd</code> is in non-blocking mode, <code>writev</code> does not make a copy the bytes before writing. Otherwise, it copies <code>bytes</code> slices, but not <code>Bigarray</code> slices.</p><p>Note that the returned Lwt promise is pending until failure or a successful write, even if the underlying descriptor is in non-blocking mode. See <a href="#val-of_unix_file_descr"><code>of_unix_file_descr</code></a> for a discussion of non-blocking I/O and Lwt.</p><p>If <a href="IO_vectors/index.html#val-system_limit"><code>IO_vectors.system_limit</code></a> is <code>Some n</code> and the count of slices in <code>vs</code> exceeds <code>n</code>, then <code>Lwt_unix.writev</code> passes only the first <code>n</code> slices in <code>vs</code> to the underlying <code>writev</code> system call.</p><p>Not implemented on Windows. It should be possible to implement, upon request, for Windows sockets only.</p><p>The behavior of <code>writev</code> when <code>vs</code> has zero slices depends on the system, and may change in future versions of Lwt. On Linux, <code>writev</code> will succeed and write zero bytes. On BSD (including macOS), <code>writev</code> will fail with <code>Unix.Unix_error (Unix.EINVAL, "writev", ...)</code>.</p><p>See <a href="http://man7.org/linux/man-pages/man3/writev.3p.html"><code>writev(3p)</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.7.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-readable"><a href="#val-readable" class="anchor"></a><code><span><span class="keyword">val</span> readable : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p>Returns whether the given file descriptor is currently readable.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-writable"><a href="#val-writable" class="anchor"></a><code><span><span class="keyword">val</span> writable : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p>Returns whether the given file descriptor is currently writable.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_read"><a href="#val-wait_read" class="anchor"></a><code><span><span class="keyword">val</span> wait_read : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Waits (without blocking other promises) until there is something to read from the file descriptor.</p><p>Note that you don't need to use this function if you are using Lwt I/O functions for reading, since they provide non-blocking waiting automatically.</p><p>The intended use case for this function is interfacing with existing libraries that are known to be blocking.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_write"><a href="#val-wait_write" class="anchor"></a><code><span><span class="keyword">val</span> wait_write : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Waits (without blocking other promises) until it is possible to write on the file descriptor.</p><p>Note that you don't need to use this function if you are using Lwt I/O functions for writing, since they provide non-blocking waiting automatically.</p><p>The intended use case for this function is interfacing with existing libraries that are known to be blocking.</p></div></div><h3 id="seeking-and-truncating"><a href="#seeking-and-truncating" class="anchor"></a>Seeking and truncating</h3><div class="odoc-spec"><div class="spec type anchored" id="type-seek_command"><a href="#type-seek_command" class="anchor"></a><code><span><span class="keyword">type</span> seek_command</span><span> = <a href="../../ocaml/Unix/index.html#type-seek_command">Unix.seek_command</a></span><span> = </span></code><ol><li id="type-seek_command.SEEK_SET" class="def variant constructor anchored"><a href="#type-seek_command.SEEK_SET" class="anchor"></a><code><span>| </span><span><span class="constructor">SEEK_SET</span></span></code></li><li id="type-seek_command.SEEK_CUR" class="def variant constructor anchored"><a href="#type-seek_command.SEEK_CUR" class="anchor"></a><code><span>| </span><span><span class="constructor">SEEK_CUR</span></span></code></li><li id="type-seek_command.SEEK_END" class="def variant constructor anchored"><a href="#type-seek_command.SEEK_END" class="anchor"></a><code><span>| </span><span><span class="constructor">SEEK_END</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-lseek"><a href="#val-lseek" class="anchor"></a><code><span><span class="keyword">val</span> lseek : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span><a href="#type-seek_command">seek_command</a> <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-lseek"><code>Unix.lseek</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-truncate"><a href="#val-truncate" class="anchor"></a><code><span><span class="keyword">val</span> truncate : <span>string <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-truncate"><code>Unix.truncate</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-ftruncate"><a href="#val-ftruncate" class="anchor"></a><code><span><span class="keyword">val</span> ftruncate : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-ftruncate"><code>Unix.ftruncate</code></a></p></div></div><h3 id="syncing"><a href="#syncing" class="anchor"></a>Syncing</h3><div class="odoc-spec"><div class="spec value anchored" id="val-fsync"><a href="#val-fsync" class="anchor"></a><code><span><span class="keyword">val</span> fsync : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Synchronise all data and metadata of the file descriptor with the disk. On Windows it uses <code>FlushFileBuffers</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fdatasync"><a href="#val-fdatasync" class="anchor"></a><code><span><span class="keyword">val</span> fdatasync : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Synchronise all data (but not metadata) of the file descriptor with the disk.</p><p>Note that <code>fdatasync</code> is not available on Windows and OS X.</p></div></div><h3 id="file-status"><a href="#file-status" class="anchor"></a>File status</h3><div class="odoc-spec"><div class="spec type anchored" id="type-file_kind"><a href="#type-file_kind" class="anchor"></a><code><span><span class="keyword">type</span> file_kind</span><span> = <a href="../../ocaml/Unix/index.html#type-file_kind">Unix.file_kind</a></span><span> = </span></code><ol><li id="type-file_kind.S_REG" class="def variant constructor anchored"><a href="#type-file_kind.S_REG" class="anchor"></a><code><span>| </span><span><span class="constructor">S_REG</span></span></code></li><li id="type-file_kind.S_DIR" class="def variant constructor anchored"><a href="#type-file_kind.S_DIR" class="anchor"></a><code><span>| </span><span><span class="constructor">S_DIR</span></span></code></li><li id="type-file_kind.S_CHR" class="def variant constructor anchored"><a href="#type-file_kind.S_CHR" class="anchor"></a><code><span>| </span><span><span class="constructor">S_CHR</span></span></code></li><li id="type-file_kind.S_BLK" class="def variant constructor anchored"><a href="#type-file_kind.S_BLK" class="anchor"></a><code><span>| </span><span><span class="constructor">S_BLK</span></span></code></li><li id="type-file_kind.S_LNK" class="def variant constructor anchored"><a href="#type-file_kind.S_LNK" class="anchor"></a><code><span>| </span><span><span class="constructor">S_LNK</span></span></code></li><li id="type-file_kind.S_FIFO" class="def variant constructor anchored"><a href="#type-file_kind.S_FIFO" class="anchor"></a><code><span>| </span><span><span class="constructor">S_FIFO</span></span></code></li><li id="type-file_kind.S_SOCK" class="def variant constructor anchored"><a href="#type-file_kind.S_SOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">S_SOCK</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-stats"><a href="#type-stats" class="anchor"></a><code><span><span class="keyword">type</span> stats</span><span> = <a href="../../ocaml/Unix/index.html#type-stats">Unix.stats</a></span><span> = </span><span>{</span></code><ol><li id="type-stats.st_dev" class="def record field anchored"><a href="#type-stats.st_dev" class="anchor"></a><code><span>st_dev : int;</span></code></li><li id="type-stats.st_ino" class="def record field anchored"><a href="#type-stats.st_ino" class="anchor"></a><code><span>st_ino : int;</span></code></li><li id="type-stats.st_kind" class="def record field anchored"><a href="#type-stats.st_kind" class="anchor"></a><code><span>st_kind : <a href="#type-file_kind">file_kind</a>;</span></code></li><li id="type-stats.st_perm" class="def record field anchored"><a href="#type-stats.st_perm" class="anchor"></a><code><span>st_perm : <a href="#type-file_perm">file_perm</a>;</span></code></li><li id="type-stats.st_nlink" class="def record field anchored"><a href="#type-stats.st_nlink" class="anchor"></a><code><span>st_nlink : int;</span></code></li><li id="type-stats.st_uid" class="def record field anchored"><a href="#type-stats.st_uid" class="anchor"></a><code><span>st_uid : int;</span></code></li><li id="type-stats.st_gid" class="def record field anchored"><a href="#type-stats.st_gid" class="anchor"></a><code><span>st_gid : int;</span></code></li><li id="type-stats.st_rdev" class="def record field anchored"><a href="#type-stats.st_rdev" class="anchor"></a><code><span>st_rdev : int;</span></code></li><li id="type-stats.st_size" class="def record field anchored"><a href="#type-stats.st_size" class="anchor"></a><code><span>st_size : int;</span></code></li><li id="type-stats.st_atime" class="def record field anchored"><a href="#type-stats.st_atime" class="anchor"></a><code><span>st_atime : float;</span></code></li><li id="type-stats.st_mtime" class="def record field anchored"><a href="#type-stats.st_mtime" class="anchor"></a><code><span>st_mtime : float;</span></code></li><li id="type-stats.st_ctime" class="def record field anchored"><a href="#type-stats.st_ctime" class="anchor"></a><code><span>st_ctime : float;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-stat"><a href="#val-stat" class="anchor"></a><code><span><span class="keyword">val</span> stat : <span>string <span class="arrow">-></span></span> <span><a href="#type-stats">stats</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-stat"><code>Unix.stat</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-lstat"><a href="#val-lstat" class="anchor"></a><code><span><span class="keyword">val</span> lstat : <span>string <span class="arrow">-></span></span> <span><a href="#type-stats">stats</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-lstat"><code>Unix.lstat</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fstat"><a href="#val-fstat" class="anchor"></a><code><span><span class="keyword">val</span> fstat : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-stats">stats</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-fstat"><code>Unix.fstat</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-file_exists"><a href="#val-file_exists" class="anchor"></a><code><span><span class="keyword">val</span> file_exists : <span>string <span class="arrow">-></span></span> <span>bool <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>file_exists name</code> tests if a file named <code>name</code> exists.</p><p>Note that <code>file_exists</code> behaves similarly to <code>Sys.file_exists</code>:</p><ul><li>“file” is interpreted as “directory entry” in this context</li></ul><ul><li><code>file_exists name</code> will return <code>false</code> in circumstances that would make <a href="#val-stat"><code>stat</code></a> raise a <a href="../../ocaml/Unix/index.html#exception-Unix_error"><code>Unix.Unix_error</code></a> exception.</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-utimes"><a href="#val-utimes" class="anchor"></a><code><span><span class="keyword">val</span> utimes : <span>string <span class="arrow">-></span></span> <span>float <span class="arrow">-></span></span> <span>float <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>utimes path atime mtime</code> updates the access and modification times of the file at <code>path</code>. The access time is set to <code>atime</code> and the modification time to <code>mtime</code>. To set both to the current time, call <code>utimes path 0. 0.</code>.</p><p>This function corresponds to <a href="../../ocaml/Unix/index.html#val-utimes"><code>Unix.utimes</code></a>. See also <a href="http://man7.org/linux/man-pages/man3/utimes.3p.html"><code>utimes(3p)</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.6.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-isatty"><a href="#val-isatty" class="anchor"></a><code><span><span class="keyword">val</span> isatty : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bool <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-isatty"><code>Unix.isatty</code></a></p></div></div><h3 id="file-operations-on-large-files"><a href="#file-operations-on-large-files" class="anchor"></a>File operations on large files</h3><div class="odoc-spec"><div class="spec module anchored" id="module-LargeFile"><a href="#module-LargeFile" class="anchor"></a><code><span><span class="keyword">module</span> <a href="LargeFile/index.html">LargeFile</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><h3 id="operations-on-file-names"><a href="#operations-on-file-names" class="anchor"></a>Operations on file names</h3><div class="odoc-spec"><div class="spec value anchored" id="val-unlink"><a href="#val-unlink" class="anchor"></a><code><span><span class="keyword">val</span> unlink : <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-unlink"><code>Unix.unlink</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rename"><a href="#val-rename" class="anchor"></a><code><span><span class="keyword">val</span> rename : <span>string <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-rename"><code>Unix.rename</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-link"><a href="#val-link" class="anchor"></a><code><span><span class="keyword">val</span> link : <span>string <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-link"><code>Unix.link</code></a></p></div></div><h3 id="file-permissions-and-ownership"><a href="#file-permissions-and-ownership" class="anchor"></a>File permissions and ownership</h3><div class="odoc-spec"><div class="spec value anchored" id="val-chmod"><a href="#val-chmod" class="anchor"></a><code><span><span class="keyword">val</span> chmod : <span>string <span class="arrow">-></span></span> <span><a href="#type-file_perm">file_perm</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-chmod"><code>Unix.chmod</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fchmod"><a href="#val-fchmod" class="anchor"></a><code><span><span class="keyword">val</span> fchmod : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-file_perm">file_perm</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-fchmod"><code>Unix.fchmod</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-chown"><a href="#val-chown" class="anchor"></a><code><span><span class="keyword">val</span> chown : <span>string <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-chown"><code>Unix.chown</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fchown"><a href="#val-fchown" class="anchor"></a><code><span><span class="keyword">val</span> fchown : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-fchown"><code>Unix.fchown</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-access_permission"><a href="#type-access_permission" class="anchor"></a><code><span><span class="keyword">type</span> access_permission</span><span> = <a href="../../ocaml/Unix/index.html#type-access_permission">Unix.access_permission</a></span><span> = </span></code><ol><li id="type-access_permission.R_OK" class="def variant constructor anchored"><a href="#type-access_permission.R_OK" class="anchor"></a><code><span>| </span><span><span class="constructor">R_OK</span></span></code></li><li id="type-access_permission.W_OK" class="def variant constructor anchored"><a href="#type-access_permission.W_OK" class="anchor"></a><code><span>| </span><span><span class="constructor">W_OK</span></span></code></li><li id="type-access_permission.X_OK" class="def variant constructor anchored"><a href="#type-access_permission.X_OK" class="anchor"></a><code><span>| </span><span><span class="constructor">X_OK</span></span></code></li><li id="type-access_permission.F_OK" class="def variant constructor anchored"><a href="#type-access_permission.F_OK" class="anchor"></a><code><span>| </span><span><span class="constructor">F_OK</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-access"><a href="#val-access" class="anchor"></a><code><span><span class="keyword">val</span> access : <span>string <span class="arrow">-></span></span> <span><span><a href="#type-access_permission">access_permission</a> list</span> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-access"><code>Unix.access</code></a></p></div></div><h3 id="operations-on-file-descriptors_2"><a href="#operations-on-file-descriptors_2" class="anchor"></a>Operations on file descriptors</h3><div class="odoc-spec"><div class="spec value anchored" id="val-dup"><a href="#val-dup" class="anchor"></a><code><span><span class="keyword">val</span> dup : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-dup"><code>Unix.dup</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-dup2"><a href="#val-dup2" class="anchor"></a><code><span><span class="keyword">val</span> dup2 : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-dup2"><code>Unix.dup2</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_close_on_exec"><a href="#val-set_close_on_exec" class="anchor"></a><code><span><span class="keyword">val</span> set_close_on_exec : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-set_close_on_exec"><code>Unix.set_close_on_exec</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-clear_close_on_exec"><a href="#val-clear_close_on_exec" class="anchor"></a><code><span><span class="keyword">val</span> clear_close_on_exec : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-clear_close_on_exec"><code>Unix.clear_close_on_exec</code></a></p></div></div><h3 id="directories"><a href="#directories" class="anchor"></a>Directories</h3><div class="odoc-spec"><div class="spec value anchored" id="val-mkdir"><a href="#val-mkdir" class="anchor"></a><code><span><span class="keyword">val</span> mkdir : <span>string <span class="arrow">-></span></span> <span><a href="#type-file_perm">file_perm</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-mkdir"><code>Unix.mkdir</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rmdir"><a href="#val-rmdir" class="anchor"></a><code><span><span class="keyword">val</span> rmdir : <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-rmdir"><code>Unix.rmdir</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-chdir"><a href="#val-chdir" class="anchor"></a><code><span><span class="keyword">val</span> chdir : <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-chdir"><code>Unix.chdir</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getcwd"><a href="#val-getcwd" class="anchor"></a><code><span><span class="keyword">val</span> getcwd : <span>unit <span class="arrow">-></span></span> <span>string <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getcwd"><code>Unix.getcwd</code></a></p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.1.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-chroot"><a href="#val-chroot" class="anchor"></a><code><span><span class="keyword">val</span> chroot : <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-chroot"><code>Unix.chroot</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-dir_handle"><a href="#type-dir_handle" class="anchor"></a><code><span><span class="keyword">type</span> dir_handle</span><span> = <a href="../../ocaml/Unix/index.html#type-dir_handle">Unix.dir_handle</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-opendir"><a href="#val-opendir" class="anchor"></a><code><span><span class="keyword">val</span> opendir : <span>string <span class="arrow">-></span></span> <span><a href="#type-dir_handle">dir_handle</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Opens a directory for listing. Directories opened with this function must be explicitly closed with <a href="#val-closedir"><code>closedir</code></a>. This is a cooperative analog of <a href="../../ocaml/Unix/index.html#val-opendir"><code>Unix.opendir</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-readdir"><a href="#val-readdir" class="anchor"></a><code><span><span class="keyword">val</span> readdir : <span><a href="#type-dir_handle">dir_handle</a> <span class="arrow">-></span></span> <span>string <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Reads the next directory entry from the given directory. Special entries such as <code>.</code> and <code>..</code> are included. If all entries have been read, raises <code>End_of_file</code>. This is a cooperative analog of <a href="../../ocaml/Unix/index.html#val-readdir"><code>Unix.readdir</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-readdir_n"><a href="#val-readdir_n" class="anchor"></a><code><span><span class="keyword">val</span> readdir_n : <span><a href="#type-dir_handle">dir_handle</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span><span>string array</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>readdir_n handle count</code> reads at most <code>count</code> entries from the given directory. It is more efficient than calling <code>readdir</code> <code>count</code> times. If the length of the returned array is smaller than <code>count</code>, this means that the end of the directory has been reached.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rewinddir"><a href="#val-rewinddir" class="anchor"></a><code><span><span class="keyword">val</span> rewinddir : <span><a href="#type-dir_handle">dir_handle</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Resets the given directory handle, so that directory listing can be restarted. Cooperative analog of <a href="../../ocaml/Unix/index.html#val-rewinddir"><code>Unix.rewinddir</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-closedir"><a href="#val-closedir" class="anchor"></a><code><span><span class="keyword">val</span> closedir : <span><a href="#type-dir_handle">dir_handle</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Closes a directory handle. Cooperative analog of <a href="../../ocaml/Unix/index.html#val-closedir"><code>Unix.closedir</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-files_of_directory"><a href="#val-files_of_directory" class="anchor"></a><code><span><span class="keyword">val</span> files_of_directory : <span>string <span class="arrow">-></span></span> <span>string <a href="../Lwt_stream/index.html#type-t">Lwt_stream.t</a></span></span></code></div><div class="spec-doc"><p><code>files_of_directory dir</code> returns the stream of all files of <code>dir</code>.</p></div></div><h3 id="pipes-and-redirections"><a href="#pipes-and-redirections" class="anchor"></a>Pipes and redirections</h3><div class="odoc-spec"><div class="spec value anchored" id="val-pipe"><a href="#val-pipe" class="anchor"></a><code><span><span class="keyword">val</span> pipe : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span>unit <span class="arrow">-></span></span> <a href="#type-file_descr">file_descr</a> * <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p><code>pipe ()</code> creates pipe using <a href="../../ocaml/Unix/index.html#val-pipe"><code>Unix.pipe</code></a> and returns two lwt <b>file descriptor</b>s created from unix <b>file_descriptor</b></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pipe_in"><a href="#val-pipe_in" class="anchor"></a><code><span><span class="keyword">val</span> pipe_in : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span>unit <span class="arrow">-></span></span> <a href="#type-file_descr">file_descr</a> * <a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a></span></code></div><div class="spec-doc"><p><code>pipe_in ()</code> is the same as <a href="#val-pipe"><code>pipe</code></a> but maps only the unix <b>file descriptor</b> for reading into a lwt one. The second is not put into non-blocking mode. You usually want to use this before forking to receive data from the child process.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pipe_out"><a href="#val-pipe_out" class="anchor"></a><code><span><span class="keyword">val</span> pipe_out : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span>unit <span class="arrow">-></span></span> <a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> * <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p><code>pipe_out ()</code> is the inverse of <a href="#val-pipe_in"><code>pipe_in</code></a>. You usually want to use this before forking to send data to the child process</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mkfifo"><a href="#val-mkfifo" class="anchor"></a><code><span><span class="keyword">val</span> mkfifo : <span>string <span class="arrow">-></span></span> <span><a href="#type-file_perm">file_perm</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-mkfifo"><code>Unix.mkfifo</code></a></p></div></div><h3 id="symbolic-links"><a href="#symbolic-links" class="anchor"></a>Symbolic links</h3><div class="odoc-spec"><div class="spec value anchored" id="val-symlink"><a href="#val-symlink" class="anchor"></a><code><span><span class="keyword">val</span> symlink : <span><span class="optlabel">?to_dir</span>:bool <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-symlink"><code>Unix.symlink</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-readlink"><a href="#val-readlink" class="anchor"></a><code><span><span class="keyword">val</span> readlink : <span>string <span class="arrow">-></span></span> <span>string <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-readlink"><code>Unix.readlink</code></a></p></div></div><h3 id="locking"><a href="#locking" class="anchor"></a>Locking</h3><div class="odoc-spec"><div class="spec type anchored" id="type-lock_command"><a href="#type-lock_command" class="anchor"></a><code><span><span class="keyword">type</span> lock_command</span><span> = <a href="../../ocaml/Unix/index.html#type-lock_command">Unix.lock_command</a></span><span> = </span></code><ol><li id="type-lock_command.F_ULOCK" class="def variant constructor anchored"><a href="#type-lock_command.F_ULOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">F_ULOCK</span></span></code></li><li id="type-lock_command.F_LOCK" class="def variant constructor anchored"><a href="#type-lock_command.F_LOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">F_LOCK</span></span></code></li><li id="type-lock_command.F_TLOCK" class="def variant constructor anchored"><a href="#type-lock_command.F_TLOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">F_TLOCK</span></span></code></li><li id="type-lock_command.F_TEST" class="def variant constructor anchored"><a href="#type-lock_command.F_TEST" class="anchor"></a><code><span>| </span><span><span class="constructor">F_TEST</span></span></code></li><li id="type-lock_command.F_RLOCK" class="def variant constructor anchored"><a href="#type-lock_command.F_RLOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">F_RLOCK</span></span></code></li><li id="type-lock_command.F_TRLOCK" class="def variant constructor anchored"><a href="#type-lock_command.F_TRLOCK" class="anchor"></a><code><span>| </span><span><span class="constructor">F_TRLOCK</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-lockf"><a href="#val-lockf" class="anchor"></a><code><span><span class="keyword">val</span> lockf : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-lock_command">lock_command</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-lockf"><code>Unix.lockf</code></a></p></div></div><h3 id="user-id,-group-id"><a href="#user-id,-group-id" class="anchor"></a>User id, group id</h3><div class="odoc-spec"><div class="spec type anchored" id="type-passwd_entry"><a href="#type-passwd_entry" class="anchor"></a><code><span><span class="keyword">type</span> passwd_entry</span><span> = <a href="../../ocaml/Unix/index.html#type-passwd_entry">Unix.passwd_entry</a></span><span> = </span><span>{</span></code><ol><li id="type-passwd_entry.pw_name" class="def record field anchored"><a href="#type-passwd_entry.pw_name" class="anchor"></a><code><span>pw_name : string;</span></code></li><li id="type-passwd_entry.pw_passwd" class="def record field anchored"><a href="#type-passwd_entry.pw_passwd" class="anchor"></a><code><span>pw_passwd : string;</span></code></li><li id="type-passwd_entry.pw_uid" class="def record field anchored"><a href="#type-passwd_entry.pw_uid" class="anchor"></a><code><span>pw_uid : int;</span></code></li><li id="type-passwd_entry.pw_gid" class="def record field anchored"><a href="#type-passwd_entry.pw_gid" class="anchor"></a><code><span>pw_gid : int;</span></code></li><li id="type-passwd_entry.pw_gecos" class="def record field anchored"><a href="#type-passwd_entry.pw_gecos" class="anchor"></a><code><span>pw_gecos : string;</span></code></li><li id="type-passwd_entry.pw_dir" class="def record field anchored"><a href="#type-passwd_entry.pw_dir" class="anchor"></a><code><span>pw_dir : string;</span></code></li><li id="type-passwd_entry.pw_shell" class="def record field anchored"><a href="#type-passwd_entry.pw_shell" class="anchor"></a><code><span>pw_shell : string;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-group_entry"><a href="#type-group_entry" class="anchor"></a><code><span><span class="keyword">type</span> group_entry</span><span> = <a href="../../ocaml/Unix/index.html#type-group_entry">Unix.group_entry</a></span><span> = </span><span>{</span></code><ol><li id="type-group_entry.gr_name" class="def record field anchored"><a href="#type-group_entry.gr_name" class="anchor"></a><code><span>gr_name : string;</span></code></li><li id="type-group_entry.gr_passwd" class="def record field anchored"><a href="#type-group_entry.gr_passwd" class="anchor"></a><code><span>gr_passwd : string;</span></code></li><li id="type-group_entry.gr_gid" class="def record field anchored"><a href="#type-group_entry.gr_gid" class="anchor"></a><code><span>gr_gid : int;</span></code></li><li id="type-group_entry.gr_mem" class="def record field anchored"><a href="#type-group_entry.gr_mem" class="anchor"></a><code><span>gr_mem : <span>string array</span>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getlogin"><a href="#val-getlogin" class="anchor"></a><code><span><span class="keyword">val</span> getlogin : <span>unit <span class="arrow">-></span></span> <span>string <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getlogin"><code>Unix.getlogin</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getpwnam"><a href="#val-getpwnam" class="anchor"></a><code><span><span class="keyword">val</span> getpwnam : <span>string <span class="arrow">-></span></span> <span><a href="#type-passwd_entry">passwd_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getpwnam"><code>Unix.getpwnam</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getgrnam"><a href="#val-getgrnam" class="anchor"></a><code><span><span class="keyword">val</span> getgrnam : <span>string <span class="arrow">-></span></span> <span><a href="#type-group_entry">group_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getgrnam"><code>Unix.getgrnam</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getpwuid"><a href="#val-getpwuid" class="anchor"></a><code><span><span class="keyword">val</span> getpwuid : <span>int <span class="arrow">-></span></span> <span><a href="#type-passwd_entry">passwd_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getpwuid"><code>Unix.getpwuid</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getgrgid"><a href="#val-getgrgid" class="anchor"></a><code><span><span class="keyword">val</span> getgrgid : <span>int <span class="arrow">-></span></span> <span><a href="#type-group_entry">group_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getgrgid"><code>Unix.getgrgid</code></a></p></div></div><h3 id="signals"><a href="#signals" class="anchor"></a>Signals</h3><div class="odoc-spec"><div class="spec type anchored" id="type-signal_handler_id"><a href="#type-signal_handler_id" class="anchor"></a><code><span><span class="keyword">type</span> signal_handler_id</span></code></div><div class="spec-doc"><p>Id of a signal handler, used to cancel it</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-on_signal"><a href="#val-on_signal" class="anchor"></a><code><span><span class="keyword">val</span> on_signal : <span>int <span class="arrow">-></span></span> <span><span>(<span>int <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> <a href="#type-signal_handler_id">signal_handler_id</a></span></code></div><div class="spec-doc"><p><code>on_signal signum f</code> calls <code>f</code> each time the signal with numnber <code>signum</code> is received by the process. It returns a signal handler identifier that can be used to stop monitoring <code>signum</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-on_signal_full"><a href="#val-on_signal_full" class="anchor"></a><code><span><span class="keyword">val</span> on_signal_full :
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span><span>(<span><a href="#type-signal_handler_id">signal_handler_id</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span>
|
||
<a href="#type-signal_handler_id">signal_handler_id</a></span></code></div><div class="spec-doc"><p><code>on_signal_full f</code> is the same as <code>on_signal f</code> except that <code>f</code> also receive the signal handler identifier as argument so it can disable it.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-disable_signal_handler"><a href="#val-disable_signal_handler" class="anchor"></a><code><span><span class="keyword">val</span> disable_signal_handler : <span><a href="#type-signal_handler_id">signal_handler_id</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Stops receiving this signal</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-signal_count"><a href="#val-signal_count" class="anchor"></a><code><span><span class="keyword">val</span> signal_count : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Returns the number of registered signal handler.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-reinstall_signal_handler"><a href="#val-reinstall_signal_handler" class="anchor"></a><code><span><span class="keyword">val</span> reinstall_signal_handler : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>reinstall_signal_handler signum</code> if any signal handler is registered for this signal with <a href="#val-on_signal"><code>on_signal</code></a>, it reinstall the signal handler (with <code>Sys.set_signal</code>). This is useful in case another part of the program install another signal handler.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-handle_signal"><a href="#val-handle_signal" class="anchor"></a><code><span><span class="keyword">val</span> handle_signal : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>handle_signal signum</code> acts as if Lwt had received the <code>signum</code> signal. This allows another IO library to install the handler, perform its own handling, but still notify Lwt. It is particularly useful for SIGCHLD, where several IO libraries may be spawning sub-processes.</p><p>This function is thread-safe.</p></div></div><h3 id="sockets"><a href="#sockets" class="anchor"></a>Sockets</h3><div class="odoc-spec"><div class="spec type anchored" id="type-inet_addr"><a href="#type-inet_addr" class="anchor"></a><code><span><span class="keyword">type</span> inet_addr</span><span> = <a href="../../ocaml/Unix/index.html#type-inet_addr">Unix.inet_addr</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-socket_domain"><a href="#type-socket_domain" class="anchor"></a><code><span><span class="keyword">type</span> socket_domain</span><span> = <a href="../../ocaml/Unix/index.html#type-socket_domain">Unix.socket_domain</a></span><span> = </span></code><ol><li id="type-socket_domain.PF_UNIX" class="def variant constructor anchored"><a href="#type-socket_domain.PF_UNIX" class="anchor"></a><code><span>| </span><span><span class="constructor">PF_UNIX</span></span></code></li><li id="type-socket_domain.PF_INET" class="def variant constructor anchored"><a href="#type-socket_domain.PF_INET" class="anchor"></a><code><span>| </span><span><span class="constructor">PF_INET</span></span></code></li><li id="type-socket_domain.PF_INET6" class="def variant constructor anchored"><a href="#type-socket_domain.PF_INET6" class="anchor"></a><code><span>| </span><span><span class="constructor">PF_INET6</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-socket_type"><a href="#type-socket_type" class="anchor"></a><code><span><span class="keyword">type</span> socket_type</span><span> = <a href="../../ocaml/Unix/index.html#type-socket_type">Unix.socket_type</a></span><span> = </span></code><ol><li id="type-socket_type.SOCK_STREAM" class="def variant constructor anchored"><a href="#type-socket_type.SOCK_STREAM" class="anchor"></a><code><span>| </span><span><span class="constructor">SOCK_STREAM</span></span></code></li><li id="type-socket_type.SOCK_DGRAM" class="def variant constructor anchored"><a href="#type-socket_type.SOCK_DGRAM" class="anchor"></a><code><span>| </span><span><span class="constructor">SOCK_DGRAM</span></span></code></li><li id="type-socket_type.SOCK_RAW" class="def variant constructor anchored"><a href="#type-socket_type.SOCK_RAW" class="anchor"></a><code><span>| </span><span><span class="constructor">SOCK_RAW</span></span></code></li><li id="type-socket_type.SOCK_SEQPACKET" class="def variant constructor anchored"><a href="#type-socket_type.SOCK_SEQPACKET" class="anchor"></a><code><span>| </span><span><span class="constructor">SOCK_SEQPACKET</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-sockaddr"><a href="#type-sockaddr" class="anchor"></a><code><span><span class="keyword">type</span> sockaddr</span><span> = <a href="../../ocaml/Unix/index.html#type-sockaddr">Unix.sockaddr</a></span><span> = </span></code><ol><li id="type-sockaddr.ADDR_UNIX" class="def variant constructor anchored"><a href="#type-sockaddr.ADDR_UNIX" class="anchor"></a><code><span>| </span><span><span class="constructor">ADDR_UNIX</span> <span class="keyword">of</span> string</span></code></li><li id="type-sockaddr.ADDR_INET" class="def variant constructor anchored"><a href="#type-sockaddr.ADDR_INET" class="anchor"></a><code><span>| </span><span><span class="constructor">ADDR_INET</span> <span class="keyword">of</span> <a href="#type-inet_addr">inet_addr</a> * int</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-socket"><a href="#val-socket" class="anchor"></a><code><span><span class="keyword">val</span> socket : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span><a href="#type-socket_domain">socket_domain</a> <span class="arrow">-></span></span> <span><a href="#type-socket_type">socket_type</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p><code>socket domain type proto</code> is the same as <a href="../../ocaml/Unix/index.html#val-socket"><code>Unix.socket</code></a> but maps the result into a lwt <b>file descriptor</b></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-socketpair"><a href="#val-socketpair" class="anchor"></a><code><span><span class="keyword">val</span> socketpair :
|
||
<span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span>
|
||
<span><a href="#type-socket_domain">socket_domain</a> <span class="arrow">-></span></span>
|
||
<span><a href="#type-socket_type">socket_type</a> <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<a href="#type-file_descr">file_descr</a> * <a href="#type-file_descr">file_descr</a></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-socketpair"><code>Unix.socketpair</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bind"><a href="#val-bind" class="anchor"></a><code><span><span class="keyword">val</span> bind : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-sockaddr">sockaddr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Binds an address to the given socket. This is the cooperative analog of <a href="../../ocaml/Unix/index.html#val-bind"><code>Unix.bind</code></a>. See also <a href="http://man7.org/linux/man-pages/man3/bind.3p.html"><code>bind(3p)</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.0.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-listen"><a href="#val-listen" class="anchor"></a><code><span><span class="keyword">val</span> listen : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-listen"><code>Unix.listen</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-accept"><a href="#val-accept" class="anchor"></a><code><span><span class="keyword">val</span> accept : <span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><span>(<a href="#type-file_descr">file_descr</a> * <a href="#type-sockaddr">sockaddr</a>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-accept"><code>Unix.accept</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-accept_n"><a href="#val-accept_n" class="anchor"></a><code><span><span class="keyword">val</span> accept_n :
|
||
<span><span class="optlabel">?cloexec</span>:bool <span class="arrow">-></span></span>
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span><span>(<span><span>(<a href="#type-file_descr">file_descr</a> * <a href="#type-sockaddr">sockaddr</a>)</span> list</span> * <span>exn option</span>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>accept_n fd count</code> accepts up to <code>count</code> connections at one time.</p><ul><li>if no connection is available right now, it returns a pending promise</li></ul><ul><li>if more than 1 and less than <code>count</code> are available, it returns all of them</li></ul><ul><li>if more than <code>count</code> are available, it returns the next <code>count</code> of them</li></ul><ul><li>if an error happens, it returns the connections that have been successfully accepted so far and the error</li></ul><p><code>accept_n</code> has the advantage of improving performance. If you want a more detailed description, you can have a look at:</p><p><a href="http://portal.acm.org/citation.cfm?id=1247435">Acceptable strategies for improving web server performance</a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-connect"><a href="#val-connect" class="anchor"></a><code><span><span class="keyword">val</span> connect : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-sockaddr">sockaddr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-connect"><code>Unix.connect</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-shutdown_command"><a href="#type-shutdown_command" class="anchor"></a><code><span><span class="keyword">type</span> shutdown_command</span><span> = <a href="../../ocaml/Unix/index.html#type-shutdown_command">Unix.shutdown_command</a></span><span> = </span></code><ol><li id="type-shutdown_command.SHUTDOWN_RECEIVE" class="def variant constructor anchored"><a href="#type-shutdown_command.SHUTDOWN_RECEIVE" class="anchor"></a><code><span>| </span><span><span class="constructor">SHUTDOWN_RECEIVE</span></span></code></li><li id="type-shutdown_command.SHUTDOWN_SEND" class="def variant constructor anchored"><a href="#type-shutdown_command.SHUTDOWN_SEND" class="anchor"></a><code><span>| </span><span><span class="constructor">SHUTDOWN_SEND</span></span></code></li><li id="type-shutdown_command.SHUTDOWN_ALL" class="def variant constructor anchored"><a href="#type-shutdown_command.SHUTDOWN_ALL" class="anchor"></a><code><span>| </span><span><span class="constructor">SHUTDOWN_ALL</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-shutdown"><a href="#val-shutdown" class="anchor"></a><code><span><span class="keyword">val</span> shutdown : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-shutdown_command">shutdown_command</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-shutdown"><code>Unix.shutdown</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getsockname"><a href="#val-getsockname" class="anchor"></a><code><span><span class="keyword">val</span> getsockname : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <a href="#type-sockaddr">sockaddr</a></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getsockname"><code>Unix.getsockname</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getpeername"><a href="#val-getpeername" class="anchor"></a><code><span><span class="keyword">val</span> getpeername : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <a href="#type-sockaddr">sockaddr</a></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getpeername"><code>Unix.getpeername</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-msg_flag"><a href="#type-msg_flag" class="anchor"></a><code><span><span class="keyword">type</span> msg_flag</span><span> = <a href="../../ocaml/Unix/index.html#type-msg_flag">Unix.msg_flag</a></span><span> = </span></code><ol><li id="type-msg_flag.MSG_OOB" class="def variant constructor anchored"><a href="#type-msg_flag.MSG_OOB" class="anchor"></a><code><span>| </span><span><span class="constructor">MSG_OOB</span></span></code></li><li id="type-msg_flag.MSG_DONTROUTE" class="def variant constructor anchored"><a href="#type-msg_flag.MSG_DONTROUTE" class="anchor"></a><code><span>| </span><span><span class="constructor">MSG_DONTROUTE</span></span></code></li><li id="type-msg_flag.MSG_PEEK" class="def variant constructor anchored"><a href="#type-msg_flag.MSG_PEEK" class="anchor"></a><code><span>| </span><span><span class="constructor">MSG_PEEK</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-recv"><a href="#val-recv" class="anchor"></a><code><span><span class="keyword">val</span> recv : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bytes <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span><span><a href="#type-msg_flag">msg_flag</a> list</span> <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-recv"><code>Unix.recv</code></a>.</p><p>On Windows, <code>recv</code> writes data into a temporary buffer, then copies it into the given one.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-recvfrom"><a href="#val-recvfrom" class="anchor"></a><code><span><span class="keyword">val</span> recvfrom :
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span>bytes <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span><span><a href="#type-msg_flag">msg_flag</a> list</span> <span class="arrow">-></span></span>
|
||
<span><span>(int * <a href="#type-sockaddr">sockaddr</a>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-recvfrom"><code>Unix.recvfrom</code></a>.</p><p>On Windows, <code>recvfrom</code> writes data into a temporary buffer, then copies it into the given one.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-send"><a href="#val-send" class="anchor"></a><code><span><span class="keyword">val</span> send : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bytes <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span><span><a href="#type-msg_flag">msg_flag</a> list</span> <span class="arrow">-></span></span> <span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-send"><code>Unix.send</code></a>.</p><p>On Windows, <code>send</code> copies the given buffer before writing.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-sendto"><a href="#val-sendto" class="anchor"></a><code><span><span class="keyword">val</span> sendto :
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span>bytes <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span><span><a href="#type-msg_flag">msg_flag</a> list</span> <span class="arrow">-></span></span>
|
||
<span><a href="#type-sockaddr">sockaddr</a> <span class="arrow">-></span></span>
|
||
<span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-sendto"><code>Unix.sendto</code></a>.</p><p>On Windows, <code>sendto</code> copies the given buffer before writing.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-recv_msg"><a href="#val-recv_msg" class="anchor"></a><code><span><span class="keyword">val</span> recv_msg :
|
||
<span><span class="label">socket</span>:<a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="label">io_vectors</span>:<a href="IO_vectors/index.html#type-t">IO_vectors.t</a> <span class="arrow">-></span></span>
|
||
<span><span>(int * <span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> list</span>)</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>recv_msg ~socket ~io_vectors</code> receives data into a list of io-vectors, plus any file-descriptors that may accompany the messages. It returns a tuple whose first field is the number of bytes received and second is a list of received file descriptors. The messages themselves will be recorded in the provided <code>io_vectors</code> list. Data is written directly into the <code>iov_buffer</code> buffers.</p><p>Not implemented on Windows.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 5.0.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-send_msg"><a href="#val-send_msg" class="anchor"></a><code><span><span class="keyword">val</span> send_msg :
|
||
<span><span class="label">socket</span>:<a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="label">io_vectors</span>:<a href="IO_vectors/index.html#type-t">IO_vectors.t</a> <span class="arrow">-></span></span>
|
||
<span><span class="label">fds</span>:<span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> list</span> <span class="arrow">-></span></span>
|
||
<span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>send_msg ~socket ~io_vectors ~fds</code> sends data from a list of io-vectors, accompanied with a list of file-descriptors. It returns the number of bytes sent. If fd-passing is not possible on the current system and <code>fds</code> is not empty, it raises <code>Lwt_sys.Not_available "fd_passing"</code>. Data is written directly from the <code>io_vectors</code> buffers.</p><p>Not implemented on Windows.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 5.0.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-send_msgto"><a href="#val-send_msgto" class="anchor"></a><code><span><span class="keyword">val</span> send_msgto :
|
||
<span><span class="label">socket</span>:<a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="label">io_vectors</span>:<a href="IO_vectors/index.html#type-t">IO_vectors.t</a> <span class="arrow">-></span></span>
|
||
<span><span class="label">fds</span>:<span><a href="../../ocaml/Unix/index.html#type-file_descr">Unix.file_descr</a> list</span> <span class="arrow">-></span></span>
|
||
<span><span class="label">dest</span>:<a href="../../ocaml/Unix/index.html#type-sockaddr">Unix.sockaddr</a> <span class="arrow">-></span></span>
|
||
<span>int <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>send_msgto ~socket ~io_vectors ~fds ~dest</code> is similar to <code>send_msg</code> but takes an additional <code>dest</code> argument to set the address when using a connection-less socket.</p><p>Not implemented on Windows.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 5.4.0</li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-credentials"><a href="#type-credentials" class="anchor"></a><code><span><span class="keyword">type</span> credentials</span><span> = </span><span>{</span></code><ol><li id="type-credentials.cred_pid" class="def record field anchored"><a href="#type-credentials.cred_pid" class="anchor"></a><code><span>cred_pid : int;</span></code></li><li id="type-credentials.cred_uid" class="def record field anchored"><a href="#type-credentials.cred_uid" class="anchor"></a><code><span>cred_uid : int;</span></code></li><li id="type-credentials.cred_gid" class="def record field anchored"><a href="#type-credentials.cred_gid" class="anchor"></a><code><span>cred_gid : int;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_credentials"><a href="#val-get_credentials" class="anchor"></a><code><span><span class="keyword">val</span> get_credentials : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <a href="#type-credentials">credentials</a></span></code></div><div class="spec-doc"><p><code>get_credentials fd</code> returns credentials information from the given socket. On some platforms, obtaining the peer pid is not possible and it will be set to <code>-1</code>. If obtaining credentials is not possible on the current system, it raises <code>Lwt_sys.Not_available "get_credentials"</code>.</p><p>This call is not available on windows.</p></div></div><h4 id="socket-options"><a href="#socket-options" class="anchor"></a>Socket options</h4><div class="odoc-spec"><div class="spec type anchored" id="type-socket_bool_option"><a href="#type-socket_bool_option" class="anchor"></a><code><span><span class="keyword">type</span> socket_bool_option</span><span> = <a href="../../ocaml/Unix/index.html#type-socket_bool_option">Unix.socket_bool_option</a></span><span> = </span></code><ol><li id="type-socket_bool_option.SO_DEBUG" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_DEBUG" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_DEBUG</span></span></code></li><li id="type-socket_bool_option.SO_BROADCAST" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_BROADCAST" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_BROADCAST</span></span></code></li><li id="type-socket_bool_option.SO_REUSEADDR" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_REUSEADDR" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_REUSEADDR</span></span></code></li><li id="type-socket_bool_option.SO_KEEPALIVE" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_KEEPALIVE" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_KEEPALIVE</span></span></code></li><li id="type-socket_bool_option.SO_DONTROUTE" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_DONTROUTE" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_DONTROUTE</span></span></code></li><li id="type-socket_bool_option.SO_OOBINLINE" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_OOBINLINE" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_OOBINLINE</span></span></code></li><li id="type-socket_bool_option.SO_ACCEPTCONN" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_ACCEPTCONN" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_ACCEPTCONN</span></span></code></li><li id="type-socket_bool_option.TCP_NODELAY" class="def variant constructor anchored"><a href="#type-socket_bool_option.TCP_NODELAY" class="anchor"></a><code><span>| </span><span><span class="constructor">TCP_NODELAY</span></span></code></li><li id="type-socket_bool_option.IPV6_ONLY" class="def variant constructor anchored"><a href="#type-socket_bool_option.IPV6_ONLY" class="anchor"></a><code><span>| </span><span><span class="constructor">IPV6_ONLY</span></span></code></li><li id="type-socket_bool_option.SO_REUSEPORT" class="def variant constructor anchored"><a href="#type-socket_bool_option.SO_REUSEPORT" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_REUSEPORT</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-socket_int_option"><a href="#type-socket_int_option" class="anchor"></a><code><span><span class="keyword">type</span> socket_int_option</span><span> = <a href="../../ocaml/Unix/index.html#type-socket_int_option">Unix.socket_int_option</a></span><span> = </span></code><ol><li id="type-socket_int_option.SO_SNDBUF" class="def variant constructor anchored"><a href="#type-socket_int_option.SO_SNDBUF" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_SNDBUF</span></span></code></li><li id="type-socket_int_option.SO_RCVBUF" class="def variant constructor anchored"><a href="#type-socket_int_option.SO_RCVBUF" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_RCVBUF</span></span></code></li><li id="type-socket_int_option.SO_ERROR" class="def variant constructor anchored"><a href="#type-socket_int_option.SO_ERROR" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_ERROR</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> Use Unix.getsockopt_error instead.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-socket_int_option.SO_TYPE" class="def variant constructor anchored"><a href="#type-socket_int_option.SO_TYPE" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_TYPE</span></span></code></li><li id="type-socket_int_option.SO_RCVLOWAT" class="def variant constructor anchored"><a href="#type-socket_int_option.SO_RCVLOWAT" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_RCVLOWAT</span></span></code></li><li id="type-socket_int_option.SO_SNDLOWAT" class="def variant constructor anchored"><a href="#type-socket_int_option.SO_SNDLOWAT" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_SNDLOWAT</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-socket_optint_option"><a href="#type-socket_optint_option" class="anchor"></a><code><span><span class="keyword">type</span> socket_optint_option</span><span> = <a href="../../ocaml/Unix/index.html#type-socket_optint_option">Unix.socket_optint_option</a></span><span> = </span></code><ol><li id="type-socket_optint_option.SO_LINGER" class="def variant constructor anchored"><a href="#type-socket_optint_option.SO_LINGER" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_LINGER</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-socket_float_option"><a href="#type-socket_float_option" class="anchor"></a><code><span><span class="keyword">type</span> socket_float_option</span><span> = <a href="../../ocaml/Unix/index.html#type-socket_float_option">Unix.socket_float_option</a></span><span> = </span></code><ol><li id="type-socket_float_option.SO_RCVTIMEO" class="def variant constructor anchored"><a href="#type-socket_float_option.SO_RCVTIMEO" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_RCVTIMEO</span></span></code></li><li id="type-socket_float_option.SO_SNDTIMEO" class="def variant constructor anchored"><a href="#type-socket_float_option.SO_SNDTIMEO" class="anchor"></a><code><span>| </span><span><span class="constructor">SO_SNDTIMEO</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Note: these options are provided for the sake of completeness only. Lwt places all sockets in non-blocking mode, for which these options are meaningless. Use <a href="../Lwt/index.html#val-pick"><code>Lwt.pick</code></a> with <a href="#val-sleep"><code>Lwt_unix.sleep</code></a> or <a href="#val-timeout"><code>Lwt_unix.timeout</code></a> for timeouts.</p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getsockopt"><a href="#val-getsockopt" class="anchor"></a><code><span><span class="keyword">val</span> getsockopt : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_bool_option">socket_bool_option</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getsockopt"><code>Unix.getsockopt</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-setsockopt"><a href="#val-setsockopt" class="anchor"></a><code><span><span class="keyword">val</span> setsockopt : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_bool_option">socket_bool_option</a> <span class="arrow">-></span></span> <span>bool <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-setsockopt"><code>Unix.setsockopt</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getsockopt_int"><a href="#val-getsockopt_int" class="anchor"></a><code><span><span class="keyword">val</span> getsockopt_int : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_int_option">socket_int_option</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getsockopt_int"><code>Unix.getsockopt_int</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-setsockopt_int"><a href="#val-setsockopt_int" class="anchor"></a><code><span><span class="keyword">val</span> setsockopt_int : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_int_option">socket_int_option</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-setsockopt_int"><code>Unix.setsockopt_int</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getsockopt_optint"><a href="#val-getsockopt_optint" class="anchor"></a><code><span><span class="keyword">val</span> getsockopt_optint : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_optint_option">socket_optint_option</a> <span class="arrow">-></span></span> <span>int option</span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getsockopt_optint"><code>Unix.getsockopt_optint</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-setsockopt_optint"><a href="#val-setsockopt_optint" class="anchor"></a><code><span><span class="keyword">val</span> setsockopt_optint :
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span><a href="#type-socket_optint_option">socket_optint_option</a> <span class="arrow">-></span></span>
|
||
<span><span>int option</span> <span class="arrow">-></span></span>
|
||
unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-setsockopt_optint"><code>Unix.setsockopt_optint</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getsockopt_float"><a href="#val-getsockopt_float" class="anchor"></a><code><span><span class="keyword">val</span> getsockopt_float : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_float_option">socket_float_option</a> <span class="arrow">-></span></span> float</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getsockopt_float"><code>Unix.getsockopt_float</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-setsockopt_float"><a href="#val-setsockopt_float" class="anchor"></a><code><span><span class="keyword">val</span> setsockopt_float : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-socket_float_option">socket_float_option</a> <span class="arrow">-></span></span> <span>float <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-setsockopt_float"><code>Unix.setsockopt_float</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getsockopt_error"><a href="#val-getsockopt_error" class="anchor"></a><code><span><span class="keyword">val</span> getsockopt_error : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="../../ocaml/Unix/index.html#type-error">Unix.error</a> option</span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getsockopt_error"><code>Unix.getsockopt_error</code></a></p></div></div><h4 id="multicast-functions"><a href="#multicast-functions" class="anchor"></a>Multicast functions</h4><div class="odoc-spec"><div class="spec value anchored" id="val-mcast_set_loop"><a href="#val-mcast_set_loop" class="anchor"></a><code><span><span class="keyword">val</span> mcast_set_loop : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>bool <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Whether sent multicast messages are received by the sending host</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mcast_set_ttl"><a href="#val-mcast_set_ttl" class="anchor"></a><code><span><span class="keyword">val</span> mcast_set_ttl : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Set TTL/hops value</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mcast_add_membership"><a href="#val-mcast_add_membership" class="anchor"></a><code><span><span class="keyword">val</span> mcast_add_membership :
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="optlabel">?ifname</span>:<a href="../../ocaml/Unix/index.html#type-inet_addr">Unix.inet_addr</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../ocaml/Unix/index.html#type-inet_addr">Unix.inet_addr</a> <span class="arrow">-></span></span>
|
||
unit</span></code></div><div class="spec-doc"><p><code>mcast_add_membership fd ~ifname addr</code> joins the multicast group <code>addr</code> on the network interface <code>ifname</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mcast_drop_membership"><a href="#val-mcast_drop_membership" class="anchor"></a><code><span><span class="keyword">val</span> mcast_drop_membership :
|
||
<span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span>
|
||
<span><span class="optlabel">?ifname</span>:<a href="../../ocaml/Unix/index.html#type-inet_addr">Unix.inet_addr</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../ocaml/Unix/index.html#type-inet_addr">Unix.inet_addr</a> <span class="arrow">-></span></span>
|
||
unit</span></code></div><div class="spec-doc"><p><code>mcast_drop_membership fd ~ifname addr</code> leaves the multicast group <code>addr</code> on the network interface <code>ifname</code>.</p></div></div><h3 id="host-and-protocol-databases"><a href="#host-and-protocol-databases" class="anchor"></a>Host and protocol databases</h3><div class="odoc-spec"><div class="spec type anchored" id="type-host_entry"><a href="#type-host_entry" class="anchor"></a><code><span><span class="keyword">type</span> host_entry</span><span> = <a href="../../ocaml/Unix/index.html#type-host_entry">Unix.host_entry</a></span><span> = </span><span>{</span></code><ol><li id="type-host_entry.h_name" class="def record field anchored"><a href="#type-host_entry.h_name" class="anchor"></a><code><span>h_name : string;</span></code></li><li id="type-host_entry.h_aliases" class="def record field anchored"><a href="#type-host_entry.h_aliases" class="anchor"></a><code><span>h_aliases : <span>string array</span>;</span></code></li><li id="type-host_entry.h_addrtype" class="def record field anchored"><a href="#type-host_entry.h_addrtype" class="anchor"></a><code><span>h_addrtype : <a href="#type-socket_domain">socket_domain</a>;</span></code></li><li id="type-host_entry.h_addr_list" class="def record field anchored"><a href="#type-host_entry.h_addr_list" class="anchor"></a><code><span>h_addr_list : <span><a href="#type-inet_addr">inet_addr</a> array</span>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-protocol_entry"><a href="#type-protocol_entry" class="anchor"></a><code><span><span class="keyword">type</span> protocol_entry</span><span> = <a href="../../ocaml/Unix/index.html#type-protocol_entry">Unix.protocol_entry</a></span><span> = </span><span>{</span></code><ol><li id="type-protocol_entry.p_name" class="def record field anchored"><a href="#type-protocol_entry.p_name" class="anchor"></a><code><span>p_name : string;</span></code></li><li id="type-protocol_entry.p_aliases" class="def record field anchored"><a href="#type-protocol_entry.p_aliases" class="anchor"></a><code><span>p_aliases : <span>string array</span>;</span></code></li><li id="type-protocol_entry.p_proto" class="def record field anchored"><a href="#type-protocol_entry.p_proto" class="anchor"></a><code><span>p_proto : int;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-service_entry"><a href="#type-service_entry" class="anchor"></a><code><span><span class="keyword">type</span> service_entry</span><span> = <a href="../../ocaml/Unix/index.html#type-service_entry">Unix.service_entry</a></span><span> = </span><span>{</span></code><ol><li id="type-service_entry.s_name" class="def record field anchored"><a href="#type-service_entry.s_name" class="anchor"></a><code><span>s_name : string;</span></code></li><li id="type-service_entry.s_aliases" class="def record field anchored"><a href="#type-service_entry.s_aliases" class="anchor"></a><code><span>s_aliases : <span>string array</span>;</span></code></li><li id="type-service_entry.s_port" class="def record field anchored"><a href="#type-service_entry.s_port" class="anchor"></a><code><span>s_port : int;</span></code></li><li id="type-service_entry.s_proto" class="def record field anchored"><a href="#type-service_entry.s_proto" class="anchor"></a><code><span>s_proto : string;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-gethostname"><a href="#val-gethostname" class="anchor"></a><code><span><span class="keyword">val</span> gethostname : <span>unit <span class="arrow">-></span></span> <span>string <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-gethostname"><code>Unix.gethostname</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-gethostbyname"><a href="#val-gethostbyname" class="anchor"></a><code><span><span class="keyword">val</span> gethostbyname : <span>string <span class="arrow">-></span></span> <span><a href="#type-host_entry">host_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-gethostbyname"><code>Unix.gethostbyname</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-gethostbyaddr"><a href="#val-gethostbyaddr" class="anchor"></a><code><span><span class="keyword">val</span> gethostbyaddr : <span><a href="#type-inet_addr">inet_addr</a> <span class="arrow">-></span></span> <span><a href="#type-host_entry">host_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-gethostbyaddr"><code>Unix.gethostbyaddr</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getprotobyname"><a href="#val-getprotobyname" class="anchor"></a><code><span><span class="keyword">val</span> getprotobyname : <span>string <span class="arrow">-></span></span> <span><a href="#type-protocol_entry">protocol_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getprotobyname"><code>Unix.getprotobyname</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getprotobynumber"><a href="#val-getprotobynumber" class="anchor"></a><code><span><span class="keyword">val</span> getprotobynumber : <span>int <span class="arrow">-></span></span> <span><a href="#type-protocol_entry">protocol_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getprotobynumber"><code>Unix.getprotobynumber</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getservbyname"><a href="#val-getservbyname" class="anchor"></a><code><span><span class="keyword">val</span> getservbyname : <span>string <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span><a href="#type-service_entry">service_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getservbyname"><code>Unix.getservbyname</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getservbyport"><a href="#val-getservbyport" class="anchor"></a><code><span><span class="keyword">val</span> getservbyport : <span>int <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span><a href="#type-service_entry">service_entry</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getservbyport"><code>Unix.getservbyport</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-addr_info"><a href="#type-addr_info" class="anchor"></a><code><span><span class="keyword">type</span> addr_info</span><span> = <a href="../../ocaml/Unix/index.html#type-addr_info">Unix.addr_info</a></span><span> = </span><span>{</span></code><ol><li id="type-addr_info.ai_family" class="def record field anchored"><a href="#type-addr_info.ai_family" class="anchor"></a><code><span>ai_family : <a href="#type-socket_domain">socket_domain</a>;</span></code></li><li id="type-addr_info.ai_socktype" class="def record field anchored"><a href="#type-addr_info.ai_socktype" class="anchor"></a><code><span>ai_socktype : <a href="#type-socket_type">socket_type</a>;</span></code></li><li id="type-addr_info.ai_protocol" class="def record field anchored"><a href="#type-addr_info.ai_protocol" class="anchor"></a><code><span>ai_protocol : int;</span></code></li><li id="type-addr_info.ai_addr" class="def record field anchored"><a href="#type-addr_info.ai_addr" class="anchor"></a><code><span>ai_addr : <a href="#type-sockaddr">sockaddr</a>;</span></code></li><li id="type-addr_info.ai_canonname" class="def record field anchored"><a href="#type-addr_info.ai_canonname" class="anchor"></a><code><span>ai_canonname : string;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-getaddrinfo_option"><a href="#type-getaddrinfo_option" class="anchor"></a><code><span><span class="keyword">type</span> getaddrinfo_option</span><span> = <a href="../../ocaml/Unix/index.html#type-getaddrinfo_option">Unix.getaddrinfo_option</a></span><span> = </span></code><ol><li id="type-getaddrinfo_option.AI_FAMILY" class="def variant constructor anchored"><a href="#type-getaddrinfo_option.AI_FAMILY" class="anchor"></a><code><span>| </span><span><span class="constructor">AI_FAMILY</span> <span class="keyword">of</span> <a href="#type-socket_domain">socket_domain</a></span></code></li><li id="type-getaddrinfo_option.AI_SOCKTYPE" class="def variant constructor anchored"><a href="#type-getaddrinfo_option.AI_SOCKTYPE" class="anchor"></a><code><span>| </span><span><span class="constructor">AI_SOCKTYPE</span> <span class="keyword">of</span> <a href="#type-socket_type">socket_type</a></span></code></li><li id="type-getaddrinfo_option.AI_PROTOCOL" class="def variant constructor anchored"><a href="#type-getaddrinfo_option.AI_PROTOCOL" class="anchor"></a><code><span>| </span><span><span class="constructor">AI_PROTOCOL</span> <span class="keyword">of</span> int</span></code></li><li id="type-getaddrinfo_option.AI_NUMERICHOST" class="def variant constructor anchored"><a href="#type-getaddrinfo_option.AI_NUMERICHOST" class="anchor"></a><code><span>| </span><span><span class="constructor">AI_NUMERICHOST</span></span></code></li><li id="type-getaddrinfo_option.AI_CANONNAME" class="def variant constructor anchored"><a href="#type-getaddrinfo_option.AI_CANONNAME" class="anchor"></a><code><span>| </span><span><span class="constructor">AI_CANONNAME</span></span></code></li><li id="type-getaddrinfo_option.AI_PASSIVE" class="def variant constructor anchored"><a href="#type-getaddrinfo_option.AI_PASSIVE" class="anchor"></a><code><span>| </span><span><span class="constructor">AI_PASSIVE</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getaddrinfo"><a href="#val-getaddrinfo" class="anchor"></a><code><span><span class="keyword">val</span> getaddrinfo :
|
||
<span>string <span class="arrow">-></span></span>
|
||
<span>string <span class="arrow">-></span></span>
|
||
<span><span><a href="#type-getaddrinfo_option">getaddrinfo_option</a> list</span> <span class="arrow">-></span></span>
|
||
<span><span><a href="#type-addr_info">addr_info</a> list</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getaddrinfo"><code>Unix.getaddrinfo</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-name_info"><a href="#type-name_info" class="anchor"></a><code><span><span class="keyword">type</span> name_info</span><span> = <a href="../../ocaml/Unix/index.html#type-name_info">Unix.name_info</a></span><span> = </span><span>{</span></code><ol><li id="type-name_info.ni_hostname" class="def record field anchored"><a href="#type-name_info.ni_hostname" class="anchor"></a><code><span>ni_hostname : string;</span></code></li><li id="type-name_info.ni_service" class="def record field anchored"><a href="#type-name_info.ni_service" class="anchor"></a><code><span>ni_service : string;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-getnameinfo_option"><a href="#type-getnameinfo_option" class="anchor"></a><code><span><span class="keyword">type</span> getnameinfo_option</span><span> = <a href="../../ocaml/Unix/index.html#type-getnameinfo_option">Unix.getnameinfo_option</a></span><span> = </span></code><ol><li id="type-getnameinfo_option.NI_NOFQDN" class="def variant constructor anchored"><a href="#type-getnameinfo_option.NI_NOFQDN" class="anchor"></a><code><span>| </span><span><span class="constructor">NI_NOFQDN</span></span></code></li><li id="type-getnameinfo_option.NI_NUMERICHOST" class="def variant constructor anchored"><a href="#type-getnameinfo_option.NI_NUMERICHOST" class="anchor"></a><code><span>| </span><span><span class="constructor">NI_NUMERICHOST</span></span></code></li><li id="type-getnameinfo_option.NI_NAMEREQD" class="def variant constructor anchored"><a href="#type-getnameinfo_option.NI_NAMEREQD" class="anchor"></a><code><span>| </span><span><span class="constructor">NI_NAMEREQD</span></span></code></li><li id="type-getnameinfo_option.NI_NUMERICSERV" class="def variant constructor anchored"><a href="#type-getnameinfo_option.NI_NUMERICSERV" class="anchor"></a><code><span>| </span><span><span class="constructor">NI_NUMERICSERV</span></span></code></li><li id="type-getnameinfo_option.NI_DGRAM" class="def variant constructor anchored"><a href="#type-getnameinfo_option.NI_DGRAM" class="anchor"></a><code><span>| </span><span><span class="constructor">NI_DGRAM</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-getnameinfo"><a href="#val-getnameinfo" class="anchor"></a><code><span><span class="keyword">val</span> getnameinfo : <span><a href="#type-sockaddr">sockaddr</a> <span class="arrow">-></span></span> <span><span><a href="#type-getnameinfo_option">getnameinfo_option</a> list</span> <span class="arrow">-></span></span> <span><a href="#type-name_info">name_info</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-getnameinfo"><code>Unix.getnameinfo</code></a></p></div></div><h3 id="terminal-interface"><a href="#terminal-interface" class="anchor"></a>Terminal interface</h3><div class="odoc-spec"><div class="spec type anchored" id="type-terminal_io"><a href="#type-terminal_io" class="anchor"></a><code><span><span class="keyword">type</span> terminal_io</span><span> = <a href="../../ocaml/Unix/index.html#type-terminal_io">Unix.terminal_io</a></span><span> = </span><span>{</span></code><ol><li id="type-terminal_io.c_ignbrk" class="def record field anchored"><a href="#type-terminal_io.c_ignbrk" class="anchor"></a><code><span><span class="keyword">mutable</span> c_ignbrk : bool;</span></code></li><li id="type-terminal_io.c_brkint" class="def record field anchored"><a href="#type-terminal_io.c_brkint" class="anchor"></a><code><span><span class="keyword">mutable</span> c_brkint : bool;</span></code></li><li id="type-terminal_io.c_ignpar" class="def record field anchored"><a href="#type-terminal_io.c_ignpar" class="anchor"></a><code><span><span class="keyword">mutable</span> c_ignpar : bool;</span></code></li><li id="type-terminal_io.c_parmrk" class="def record field anchored"><a href="#type-terminal_io.c_parmrk" class="anchor"></a><code><span><span class="keyword">mutable</span> c_parmrk : bool;</span></code></li><li id="type-terminal_io.c_inpck" class="def record field anchored"><a href="#type-terminal_io.c_inpck" class="anchor"></a><code><span><span class="keyword">mutable</span> c_inpck : bool;</span></code></li><li id="type-terminal_io.c_istrip" class="def record field anchored"><a href="#type-terminal_io.c_istrip" class="anchor"></a><code><span><span class="keyword">mutable</span> c_istrip : bool;</span></code></li><li id="type-terminal_io.c_inlcr" class="def record field anchored"><a href="#type-terminal_io.c_inlcr" class="anchor"></a><code><span><span class="keyword">mutable</span> c_inlcr : bool;</span></code></li><li id="type-terminal_io.c_igncr" class="def record field anchored"><a href="#type-terminal_io.c_igncr" class="anchor"></a><code><span><span class="keyword">mutable</span> c_igncr : bool;</span></code></li><li id="type-terminal_io.c_icrnl" class="def record field anchored"><a href="#type-terminal_io.c_icrnl" class="anchor"></a><code><span><span class="keyword">mutable</span> c_icrnl : bool;</span></code></li><li id="type-terminal_io.c_ixon" class="def record field anchored"><a href="#type-terminal_io.c_ixon" class="anchor"></a><code><span><span class="keyword">mutable</span> c_ixon : bool;</span></code></li><li id="type-terminal_io.c_ixoff" class="def record field anchored"><a href="#type-terminal_io.c_ixoff" class="anchor"></a><code><span><span class="keyword">mutable</span> c_ixoff : bool;</span></code></li><li id="type-terminal_io.c_opost" class="def record field anchored"><a href="#type-terminal_io.c_opost" class="anchor"></a><code><span><span class="keyword">mutable</span> c_opost : bool;</span></code></li><li id="type-terminal_io.c_obaud" class="def record field anchored"><a href="#type-terminal_io.c_obaud" class="anchor"></a><code><span><span class="keyword">mutable</span> c_obaud : int;</span></code></li><li id="type-terminal_io.c_ibaud" class="def record field anchored"><a href="#type-terminal_io.c_ibaud" class="anchor"></a><code><span><span class="keyword">mutable</span> c_ibaud : int;</span></code></li><li id="type-terminal_io.c_csize" class="def record field anchored"><a href="#type-terminal_io.c_csize" class="anchor"></a><code><span><span class="keyword">mutable</span> c_csize : int;</span></code></li><li id="type-terminal_io.c_cstopb" class="def record field anchored"><a href="#type-terminal_io.c_cstopb" class="anchor"></a><code><span><span class="keyword">mutable</span> c_cstopb : int;</span></code></li><li id="type-terminal_io.c_cread" class="def record field anchored"><a href="#type-terminal_io.c_cread" class="anchor"></a><code><span><span class="keyword">mutable</span> c_cread : bool;</span></code></li><li id="type-terminal_io.c_parenb" class="def record field anchored"><a href="#type-terminal_io.c_parenb" class="anchor"></a><code><span><span class="keyword">mutable</span> c_parenb : bool;</span></code></li><li id="type-terminal_io.c_parodd" class="def record field anchored"><a href="#type-terminal_io.c_parodd" class="anchor"></a><code><span><span class="keyword">mutable</span> c_parodd : bool;</span></code></li><li id="type-terminal_io.c_hupcl" class="def record field anchored"><a href="#type-terminal_io.c_hupcl" class="anchor"></a><code><span><span class="keyword">mutable</span> c_hupcl : bool;</span></code></li><li id="type-terminal_io.c_clocal" class="def record field anchored"><a href="#type-terminal_io.c_clocal" class="anchor"></a><code><span><span class="keyword">mutable</span> c_clocal : bool;</span></code></li><li id="type-terminal_io.c_isig" class="def record field anchored"><a href="#type-terminal_io.c_isig" class="anchor"></a><code><span><span class="keyword">mutable</span> c_isig : bool;</span></code></li><li id="type-terminal_io.c_icanon" class="def record field anchored"><a href="#type-terminal_io.c_icanon" class="anchor"></a><code><span><span class="keyword">mutable</span> c_icanon : bool;</span></code></li><li id="type-terminal_io.c_noflsh" class="def record field anchored"><a href="#type-terminal_io.c_noflsh" class="anchor"></a><code><span><span class="keyword">mutable</span> c_noflsh : bool;</span></code></li><li id="type-terminal_io.c_echo" class="def record field anchored"><a href="#type-terminal_io.c_echo" class="anchor"></a><code><span><span class="keyword">mutable</span> c_echo : bool;</span></code></li><li id="type-terminal_io.c_echoe" class="def record field anchored"><a href="#type-terminal_io.c_echoe" class="anchor"></a><code><span><span class="keyword">mutable</span> c_echoe : bool;</span></code></li><li id="type-terminal_io.c_echok" class="def record field anchored"><a href="#type-terminal_io.c_echok" class="anchor"></a><code><span><span class="keyword">mutable</span> c_echok : bool;</span></code></li><li id="type-terminal_io.c_echonl" class="def record field anchored"><a href="#type-terminal_io.c_echonl" class="anchor"></a><code><span><span class="keyword">mutable</span> c_echonl : bool;</span></code></li><li id="type-terminal_io.c_vintr" class="def record field anchored"><a href="#type-terminal_io.c_vintr" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vintr : char;</span></code></li><li id="type-terminal_io.c_vquit" class="def record field anchored"><a href="#type-terminal_io.c_vquit" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vquit : char;</span></code></li><li id="type-terminal_io.c_verase" class="def record field anchored"><a href="#type-terminal_io.c_verase" class="anchor"></a><code><span><span class="keyword">mutable</span> c_verase : char;</span></code></li><li id="type-terminal_io.c_vkill" class="def record field anchored"><a href="#type-terminal_io.c_vkill" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vkill : char;</span></code></li><li id="type-terminal_io.c_veof" class="def record field anchored"><a href="#type-terminal_io.c_veof" class="anchor"></a><code><span><span class="keyword">mutable</span> c_veof : char;</span></code></li><li id="type-terminal_io.c_veol" class="def record field anchored"><a href="#type-terminal_io.c_veol" class="anchor"></a><code><span><span class="keyword">mutable</span> c_veol : char;</span></code></li><li id="type-terminal_io.c_vmin" class="def record field anchored"><a href="#type-terminal_io.c_vmin" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vmin : int;</span></code></li><li id="type-terminal_io.c_vtime" class="def record field anchored"><a href="#type-terminal_io.c_vtime" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vtime : int;</span></code></li><li id="type-terminal_io.c_vstart" class="def record field anchored"><a href="#type-terminal_io.c_vstart" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vstart : char;</span></code></li><li id="type-terminal_io.c_vstop" class="def record field anchored"><a href="#type-terminal_io.c_vstop" class="anchor"></a><code><span><span class="keyword">mutable</span> c_vstop : char;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-tcgetattr"><a href="#val-tcgetattr" class="anchor"></a><code><span><span class="keyword">val</span> tcgetattr : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-terminal_io">terminal_io</a> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-tcgetattr"><code>Unix.tcgetattr</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-setattr_when"><a href="#type-setattr_when" class="anchor"></a><code><span><span class="keyword">type</span> setattr_when</span><span> = <a href="../../ocaml/Unix/index.html#type-setattr_when">Unix.setattr_when</a></span><span> = </span></code><ol><li id="type-setattr_when.TCSANOW" class="def variant constructor anchored"><a href="#type-setattr_when.TCSANOW" class="anchor"></a><code><span>| </span><span><span class="constructor">TCSANOW</span></span></code></li><li id="type-setattr_when.TCSADRAIN" class="def variant constructor anchored"><a href="#type-setattr_when.TCSADRAIN" class="anchor"></a><code><span>| </span><span><span class="constructor">TCSADRAIN</span></span></code></li><li id="type-setattr_when.TCSAFLUSH" class="def variant constructor anchored"><a href="#type-setattr_when.TCSAFLUSH" class="anchor"></a><code><span>| </span><span><span class="constructor">TCSAFLUSH</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-tcsetattr"><a href="#val-tcsetattr" class="anchor"></a><code><span><span class="keyword">val</span> tcsetattr : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-setattr_when">setattr_when</a> <span class="arrow">-></span></span> <span><a href="#type-terminal_io">terminal_io</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-tcsetattr"><code>Unix.tcsetattr</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-tcsendbreak"><a href="#val-tcsendbreak" class="anchor"></a><code><span><span class="keyword">val</span> tcsendbreak : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-tcsendbreak"><code>Unix.tcsendbreak</code></a></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-tcdrain"><a href="#val-tcdrain" class="anchor"></a><code><span><span class="keyword">val</span> tcdrain : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-tcdrain"><code>Unix.tcdrain</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-flush_queue"><a href="#type-flush_queue" class="anchor"></a><code><span><span class="keyword">type</span> flush_queue</span><span> = <a href="../../ocaml/Unix/index.html#type-flush_queue">Unix.flush_queue</a></span><span> = </span></code><ol><li id="type-flush_queue.TCIFLUSH" class="def variant constructor anchored"><a href="#type-flush_queue.TCIFLUSH" class="anchor"></a><code><span>| </span><span><span class="constructor">TCIFLUSH</span></span></code></li><li id="type-flush_queue.TCOFLUSH" class="def variant constructor anchored"><a href="#type-flush_queue.TCOFLUSH" class="anchor"></a><code><span>| </span><span><span class="constructor">TCOFLUSH</span></span></code></li><li id="type-flush_queue.TCIOFLUSH" class="def variant constructor anchored"><a href="#type-flush_queue.TCIOFLUSH" class="anchor"></a><code><span>| </span><span><span class="constructor">TCIOFLUSH</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-tcflush"><a href="#val-tcflush" class="anchor"></a><code><span><span class="keyword">val</span> tcflush : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-flush_queue">flush_queue</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-tcflush"><code>Unix.tcflush</code></a></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-flow_action"><a href="#type-flow_action" class="anchor"></a><code><span><span class="keyword">type</span> flow_action</span><span> = <a href="../../ocaml/Unix/index.html#type-flow_action">Unix.flow_action</a></span><span> = </span></code><ol><li id="type-flow_action.TCOOFF" class="def variant constructor anchored"><a href="#type-flow_action.TCOOFF" class="anchor"></a><code><span>| </span><span><span class="constructor">TCOOFF</span></span></code></li><li id="type-flow_action.TCOON" class="def variant constructor anchored"><a href="#type-flow_action.TCOON" class="anchor"></a><code><span>| </span><span><span class="constructor">TCOON</span></span></code></li><li id="type-flow_action.TCIOFF" class="def variant constructor anchored"><a href="#type-flow_action.TCIOFF" class="anchor"></a><code><span>| </span><span><span class="constructor">TCIOFF</span></span></code></li><li id="type-flow_action.TCION" class="def variant constructor anchored"><a href="#type-flow_action.TCION" class="anchor"></a><code><span>| </span><span><span class="constructor">TCION</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-tcflow"><a href="#val-tcflow" class="anchor"></a><code><span><span class="keyword">val</span> tcflow : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><a href="#type-flow_action">flow_action</a> <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wrapper for <a href="../../ocaml/Unix/index.html#val-tcflow"><code>Unix.tcflow</code></a></p></div></div><h3 id="configuration-(deprecated)"><a href="#configuration-(deprecated)" class="anchor"></a>Configuration (deprecated)</h3><div class="odoc-spec"><div class="spec type anchored" id="type-async_method"><a href="#type-async_method" class="anchor"></a><code><span><span class="keyword">type</span> async_method</span><span> = </span></code><ol><li id="type-async_method.Async_none" class="def variant constructor anchored"><a href="#type-async_method.Async_none" class="anchor"></a><code><span>| </span><span><span class="constructor">Async_none</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>System calls are made synchronously, and may block the entire program.</p><span class="comment-delim">*)</span></div></li><li id="type-async_method.Async_detach" class="def variant constructor anchored"><a href="#type-async_method.Async_detach" class="anchor"></a><code><span>| </span><span><span class="constructor">Async_detach</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>System calls are made in another system thread, thus without blocking other Lwt promises. The drawback is that it may degrade performance in some cases.</p><p>This is the default.</p><span class="comment-delim">*)</span></div></li><li id="type-async_method.Async_switch" class="def variant constructor anchored"><a href="#type-async_method.Async_switch" class="anchor"></a><code><span>| </span><span><span class="constructor">Async_switch</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>A synonym for <code>Async_detach</code>. This was a different method in the past.</p></li></ul><span class="comment-delim">*)</span></div></li></ol></div><div class="spec-doc"><p>For system calls that cannot be made asynchronously, Lwt uses one of the following method:</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-default_async_method"><a href="#val-default_async_method" class="anchor"></a><code><span><span class="keyword">val</span> default_async_method : <span>unit <span class="arrow">-></span></span> <a href="#type-async_method">async_method</a></span></code></div><div class="spec-doc"><p>Returns the default async method.</p><p>This can be initialized using the environment variable <code>"LWT_ASYNC_METHOD"</code> with possible values <code>"none"</code>, <code>"detach"</code> and <code>"switch"</code>.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will always return <code>Async_detach</code> in Lwt 5.0.0.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_default_async_method"><a href="#val-set_default_async_method" class="anchor"></a><code><span><span class="keyword">val</span> set_default_async_method : <span><a href="#type-async_method">async_method</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Sets the default async method.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will be a no-op in Lwt 5.0.0.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-async_method"><a href="#val-async_method" class="anchor"></a><code><span><span class="keyword">val</span> async_method : <span>unit <span class="arrow">-></span></span> <a href="#type-async_method">async_method</a></span></code></div><div class="spec-doc"><p><code>async_method ()</code> returns the async method used in the current thread.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will always return <code>Async_detach</code> in Lwt 5.0.0.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-async_method_key"><a href="#val-async_method_key" class="anchor"></a><code><span><span class="keyword">val</span> async_method_key : <span><a href="#type-async_method">async_method</a> <a href="../Lwt/index.html#type-key">Lwt.key</a></span></span></code></div><div class="spec-doc"><p>The key for storing the local async method.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will be ignored in Lwt 5.0.0.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_async_none"><a href="#val-with_async_none" class="anchor"></a><code><span><span class="keyword">val</span> with_async_none : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>with_async_none f</code> is a shorthand for:</p><pre class="language-ocaml"><code>Lwt.with_value async_method_key (Some Async_none) f</code></pre><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will have no effect in Lwt 5.0.0.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_async_detach"><a href="#val-with_async_detach" class="anchor"></a><code><span><span class="keyword">val</span> with_async_detach : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>with_async_detach f</code> is a shorthand for:</p><pre class="language-ocaml"><code>Lwt.with_value async_method_key (Some Async_detach) f</code></pre><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will have no effect in Lwt 5.0.0.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_async_switch"><a href="#val-with_async_switch" class="anchor"></a><code><span><span class="keyword">val</span> with_async_switch : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>with_async_switch f</code> is a shorthand for:</p><pre class="language-ocaml"><code>Lwt.with_value async_method_key (Some Async_switch) f</code></pre><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Will have no effect in Lwt 5.0.0.</p></li></ul></div></div><h3 id="low-level-interaction"><a href="#low-level-interaction" class="anchor"></a>Low-level interaction</h3><div class="odoc-spec"><div class="spec exception anchored" id="exception-Retry"><a href="#exception-Retry" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Retry</span></span></code></div><div class="spec-doc"><p>If an action raises <a href="#exception-Retry"><code>Retry</code></a>, it will be requeued until the <b>file descriptor</b> becomes readable/writable again.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Retry_read"><a href="#exception-Retry_read" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Retry_read</span></span></code></div><div class="spec-doc"><p>If an action raises <a href="#exception-Retry_read"><code>Retry_read</code></a>, it will be requeued until the <b>file descriptor</b> becomes readable.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Retry_write"><a href="#exception-Retry_write" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Retry_write</span></span></code></div><div class="spec-doc"><p>If an action raises <a href="#exception-Retry_read"><code>Retry_read</code></a>, it will be requeued until the <b>file descriptor</b> becomes writables.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-io_event"><a href="#type-io_event" class="anchor"></a><code><span><span class="keyword">type</span> io_event</span><span> = </span></code><ol><li id="type-io_event.Read" class="def variant constructor anchored"><a href="#type-io_event.Read" class="anchor"></a><code><span>| </span><span><span class="constructor">Read</span></span></code></li><li id="type-io_event.Write" class="def variant constructor anchored"><a href="#type-io_event.Write" class="anchor"></a><code><span>| </span><span><span class="constructor">Write</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wrap_syscall"><a href="#val-wrap_syscall" class="anchor"></a><code><span><span class="keyword">val</span> wrap_syscall : <span><a href="#type-io_event">io_event</a> <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>wrap_syscall set fd action</code> wrap an action on a <b>file descriptor</b>. It tries to execute action, and if it can not be performed immediately without blocking, it is registered for later.</p><p>In the latter case, if the promise is canceled, <code>action</code> is removed from <code>set</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-check_descriptor"><a href="#val-check_descriptor" class="anchor"></a><code><span><span class="keyword">val</span> check_descriptor : <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>check_descriptor fd</code> raise an exception if <code>fd</code> is not in the state <code>Open</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-register_action"><a href="#val-register_action" class="anchor"></a><code><span><span class="keyword">val</span> register_action : <span><a href="#type-io_event">io_event</a> <span class="arrow">-></span></span> <span><a href="#type-file_descr">file_descr</a> <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>register_action set fd action</code> registers <code>action</code> on <code>fd</code>. When <code>fd</code> becomes <code>readable</code>/<code>writable</code> <code>action</code> is called.</p><p>Note:</p><ul><li>you must call <code>check_descriptor fd</code> before calling <code>register_action</code></li></ul><ul><li>you should prefer using <a href="#val-wrap_syscall"><code>wrap_syscall</code></a></li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-job"><a href="#type-job" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a job</span></span></code></div><div class="spec-doc"><p>Type of job descriptions. A job description describe how to call a C function and how to get its result. The C function may be executed in another system thread.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-run_job"><a href="#val-run_job" class="anchor"></a><code><span><span class="keyword">val</span> run_job : <span><span class="optlabel">?async_method</span>:<a href="#type-async_method">async_method</a> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-job">job</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p><code>run_job ?async_method job</code> starts <code>job</code> and wait for its termination.</p><p>The <code>~async_method</code> argument will be ignored in Lwt 5.0.0, and this function will always act as if <code>~async_method:Async_detach</code> is passed.</p><p>The async method is chosen follow:</p><ul><li>if the optional parameter <code>async_method</code> is specified, it is used,</li><li>otherwise if the local key <a href="#val-async_method_key"><code>async_method_key</code></a> is set in the current thread, it is used,</li><li>otherwise the default method (returned by <a href="#val-default_async_method"><code>default_async_method</code></a>) is used.</li></ul><p>If the method is <code>Async_none</code> then the job is run synchronously and may block the current system thread, thus blocking all Lwt threads.</p><p>If the method is <code>Async_detach</code> then the job is run in another system thread, unless the the maximum number of worker threads has been reached (as given by <a href="#val-pool_size"><code>pool_size</code></a>).</p><p>If the method is <code>Async_switch</code> then the job is run synchronously and if it blocks, execution will continue in another system thread (unless the limit is reached).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-abort_jobs"><a href="#val-abort_jobs" class="anchor"></a><code><span><span class="keyword">val</span> abort_jobs : <span>exn <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>abort_jobs exn</code> make all pending jobs to fail with exn. Note that this does not abort the real job (i.e. the C function executing it), just the lwt thread for it.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cancel_jobs"><a href="#val-cancel_jobs" class="anchor"></a><code><span><span class="keyword">val</span> cancel_jobs : <span>unit <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>cancel_jobs ()</code> is the same as <code>abort_jobs Lwt.Canceled</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_for_jobs"><a href="#val-wait_for_jobs" class="anchor"></a><code><span><span class="keyword">val</span> wait_for_jobs : <span>unit <span class="arrow">-></span></span> <span>unit <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><p>Wait for all pending jobs to terminate.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-execute_job"><a href="#val-execute_job" class="anchor"></a><code><span><span class="keyword">val</span> execute_job :
|
||
<span><span class="optlabel">?async_method</span>:<a href="#type-async_method">async_method</a> <span class="arrow">-></span></span>
|
||
<span><span class="label">job</span>:<span><span class="type-var">'a</span> <a href="#type-job">job</a></span> <span class="arrow">-></span></span>
|
||
<span><span class="label">result</span>:<span>(<span><span><span class="type-var">'a</span> <a href="#type-job">job</a></span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span>
|
||
<span><span class="label">free</span>:<span>(<span><span><span class="type-var">'a</span> <a href="#type-job">job</a></span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span>
|
||
<span><span class="type-var">'b</span> <a href="../Lwt/index.html#type-t">Lwt.t</a></span></span></code></div><div class="spec-doc"><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>Use <code>run_job</code>.</p></li></ul></div></div><h3 id="notifications"><a href="#notifications" class="anchor"></a>Notifications</h3><p>Lwt internally use a pipe to send notification to the main thread. The following functions allow to use this pipe.</p><div class="odoc-spec"><div class="spec value anchored" id="val-make_notification"><a href="#val-make_notification" class="anchor"></a><code><span><span class="keyword">val</span> make_notification : <span><span class="optlabel">?once</span>:bool <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p><code>make_notification ?once f</code> registers a new notifier. It returns the id of the notifier. Each time a notification with this id is received, <code>f</code> is called.</p><p>if <code>once</code> is specified, then the notification is stopped after the first time it is received. It defaults to <code>false</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-send_notification"><a href="#val-send_notification" class="anchor"></a><code><span><span class="keyword">val</span> send_notification : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>send_notification id</code> sends a notification.</p><p>This function is thread-safe.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-stop_notification"><a href="#val-stop_notification" class="anchor"></a><code><span><span class="keyword">val</span> stop_notification : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Stop the given notification. Note that you should not reuse the id after the notification has been stopped, the result is unspecified if you do so.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-call_notification"><a href="#val-call_notification" class="anchor"></a><code><span><span class="keyword">val</span> call_notification : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Call the handler associated to the given notification. Note that if the notification was defined with <code>once = true</code> it is removed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_notification"><a href="#val-set_notification" class="anchor"></a><code><span><span class="keyword">val</span> set_notification : <span>int <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>set_notification id f</code> replace the function associated to the notification by <code>f</code>. It raises <code>Not_found</code> if the given notification is not found.</p></div></div><h3 id="system-threads-pool"><a href="#system-threads-pool" class="anchor"></a>System threads pool</h3><p>If the program is using the async method <code>Async_detach</code> or <code>Async_switch</code>, Lwt will launch system threads to execute blocking system calls asynchronously.</p><div class="odoc-spec"><div class="spec value anchored" id="val-pool_size"><a href="#val-pool_size" class="anchor"></a><code><span><span class="keyword">val</span> pool_size : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Maximum number of system threads that can be started. If this limit is reached, jobs will be executed synchronously.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_pool_size"><a href="#val-set_pool_size" class="anchor"></a><code><span><span class="keyword">val</span> set_pool_size : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Change the size of the pool.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-thread_count"><a href="#val-thread_count" class="anchor"></a><code><span><span class="keyword">val</span> thread_count : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>The number of system threads running (excluding this one).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-thread_waiting_count"><a href="#val-thread_waiting_count" class="anchor"></a><code><span><span class="keyword">val</span> thread_waiting_count : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>The number threads waiting for a job.</p></div></div><h3 id="cpus"><a href="#cpus" class="anchor"></a>CPUs</h3><div class="odoc-spec"><div class="spec value anchored" id="val-get_cpu"><a href="#val-get_cpu" class="anchor"></a><code><span><span class="keyword">val</span> get_cpu : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p><code>get_cpu ()</code> returns the number of the CPU the current thread is running on.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_affinity"><a href="#val-get_affinity" class="anchor"></a><code><span><span class="keyword">val</span> get_affinity : <span><span class="optlabel">?pid</span>:int <span class="arrow">-></span></span> <span>unit <span class="arrow">-></span></span> <span>int list</span></span></code></div><div class="spec-doc"><p><code>get_affinity ?pid ()</code> returns the list of CPUs the process with pid <code>pid</code> is allowed to run on. If <code>pid</code> is not specified then the affinity of the current process is returned.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_affinity"><a href="#val-set_affinity" class="anchor"></a><code><span><span class="keyword">val</span> set_affinity : <span><span class="optlabel">?pid</span>:int <span class="arrow">-></span></span> <span><span>int list</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>set_affinity ?pid cpus</code> sets the list of CPUs the given process is allowed to run on.</p></div></div><h3 id="versioned-interfaces"><a href="#versioned-interfaces" class="anchor"></a>Versioned interfaces</h3><div class="odoc-spec"><div class="spec module anchored" id="module-Versioned"><a href="#module-Versioned" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Versioned/index.html">Versioned</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Versioned variants of APIs undergoing breaking changes.</p></div></div></div></body></html>
|