autodoc.git
/
traditional_manual
/
chapter_21.html
version
»
Context lines:
10
20
40
80
file
none
3
autodoc.git/traditional_manual/chapter_21.html:69694:
<dt class='head--doc'><span id='p-name'></span>Parameter <code class='parameter'>name</code></dt> <dd></dd><dd class='body--doc'><p>The name of parameter. One of <code class='expr'>"sample_rate"</code>, <code class='expr'>"bit_rate"</code>, <code class='expr'>"channels"</code>.</p> </dd> <dt class='head--doc'>Returns</dt> <dd class='body--doc'><p>Returns 1 on success, 0 otherwise (parameter not known).</p> </dd> <dt class='head--doc'>See also</dt> <dd class='body--doc'><p><code>get_codec_params()</code></p> </dd></dl>
+
</dd></dl></dd></dl><dl><dt><h2 class='header'>Module <b class='ms datatype'>_Stdio</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>IPPROTO_IP</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>IPPROTO_IP</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set IP-level options</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>IPPROTO_TCP</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>IPPROTO_TCP</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set TCP-level options</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>IP_TOS</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>IP_TOS</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set Type Of Service</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_ATTRIB</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_ATTRIB</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for attribute changes on a file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_DELETE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_DELETE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for deletion of a file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_EXTEND</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_EXTEND</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for extension events on a file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_LINK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_LINK</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for changes to a file's link count.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_RENAME</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_RENAME</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for move or rename events on a file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_REVOKE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_REVOKE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for access revokation (unmount, etc).</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>NOTE_WRITE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_WRITE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used with <code>Stdio.File()->set_fs_event_callback()</code> to monitor
+
for writes to a file.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Available on systems that use kqueue.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_BIDIRECTIONAL</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BIDIRECTIONAL</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file is bi-directional.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_BUFFERED</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BUFFERED</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file is buffered (usually 4KB).</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_IPC</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_IPC</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file may be used for inter process communication.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_NONBLOCK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_NONBLOCK</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file supports nonblocking I/O.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_REVERSE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_REVERSE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Request reversed operation.</p>
+
<p> Used as argument to <code>Stdio.File()->pipe()</code>, when
+
<code>PROP_BIDIRECTIONAL</code> hasn't been specified, to
+
request the direction of the resulting pipe to
+
reversed.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_SEND_FD</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SEND_FD</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The <code>Stdio.File</code> object might support the <code>Stdio.File()->send_fd()</code>
+
operation.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code>, <code>Stdio.File()->send_fd()</code>,
+
<code>Stdio.File()->receive_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_SHUTDOWN</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SHUTDOWN</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The file supports shutting down transmission in either
+
direction.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->close()</code>, <code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_TTY</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_TTY</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The <code>Stdio.File</code> object supports tty operations.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This constant is only present on platforms where pseudo tty
+
(aka pty) operations are available, and may thus be used to
+
detect whether such operations should be attempted.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>SOL_SOCKET</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>SOL_SOCKET</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set socket-level options</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>SO_KEEPALIVE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>SO_KEEPALIVE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to control TCP/IP keep-alive packets.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>TCP_NODELAY</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>TCP_NODELAY</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to control Nagle's Algorithm.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>XATTR_CREATE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>XATTR_CREATE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used by <code>setxattr</code> function and method to signify a pure
+
create, which will fail if the attribute already exists.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>XATTR_REPLACE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>XATTR_REPLACE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Used by <code>setxattr</code> function and method to signify a replace,
+
which will fail the the attribute does not already exists.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>__HAVE_OOB__</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>__HAVE_OOB__</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Exists and has the value 1 if OOB operations are available.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 7.5 and later OOB operations are always present.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>__HAVE_SEND_FD__</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>__HAVE_SEND_FD__</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Support for sending of file descriptors over
+
<code>Stdio.File()->pipe()</code> objects with <code>PROP_SEND_FD</code>
+
capability is supported.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File()->send_fd()</code>, <code>Stdio.File()->receive_fd()</code>,
+
<code>Stdio.File()->read()</code>, <code>Stdio.File()->write()</code>,
+
<code>Stdio.File()->pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>__OOB__</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>__OOB__</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Implementation level of nonblocking I/O OOB support.</p>
+
<table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Nonblocking OOB support is not supported.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>1</code></code></td><td><p>Nonblocking OOB works a little.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>2</code></code></td><td><p>Nonblocking OOB almost works.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>3</code></code></td><td><p>Nonblocking OOB works as intended.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>-1</code></code></td><td><p>Unknown level of nonblocking OOB support.</p>
+
</td></tr>
+
</table><p>This constant only exists when OOB operations are
+
available, i.e. when <code>__HAVE_OOB__</code> is 1.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_all_active_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>get_all_active_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the id of all the active file descriptors.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>gethostip</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mapping</code>) <b><span class='method'>gethostip</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the IP addresses of the host.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns a mapping that maps interface name to a mapping with
+
more information about that interface. That information mapping
+
looks as follows.</p>
+
<table class='box'><tr><td><code><code class='key'>"ips"</code> : <code class='datatype'>array</code>(<code class='datatype'>string</code>)</code></td><td><p>A list of all IP addresses bound to this interface.</p>
+
</td></tr>
+
</table></dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getprotobyname</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>getprotobyname</span>(</b><code class='datatype'>string(8bit)</code> <code class='argument'>name</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the protocol number of the protocol <code class='expr'>name</code>.
+
This calls the POSIX function getprotobyname.
+
If the protocol cannot be found an error is thrown.</p>
+
</dd></dl>
+
<dl><dt><h2 class='header'>Enum <b class='ms datatype'>_Stdio.FileModeFlags</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File mode flags returned by <code>Fd()->mode()</code>.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_APPEND</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_APPEND</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File open for appending.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_CREATE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_CREATE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Create a new file if it didn't exist earlier.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_EXCLUSIVE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_EXCLUSIVE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Exclusive access to the file.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_NONBLOCKING</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_NONBLOCKING</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File opened in nonblocking mode.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_READ</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_READ</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File open for reading.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_TRUNC</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_TRUNC</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Truncate the file on open.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>FILE_WRITE</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_WRITE</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File open for writing.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Enum <b class='ms datatype'>_Stdio.FilePropertyFlags</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File properties for use with eg <code>Fd()->pipe()</code>,
+
and returned by eg <code>Fd()->mode()</code>.</p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_BIDIRECTIONAL</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BIDIRECTIONAL</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File supports both sending and receiving.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_BUFFERED</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BUFFERED</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File has internal buffering.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_IPC</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_IPC</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File can be used for interprocess communication.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_NONBLOCK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_NONBLOCK</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File supports nonblocking operation.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_SEND_FD</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SEND_FD</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File is capable of sending open file descriptors.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_SHUTDOWN</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SHUTDOWN</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File supports unidirectional close.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>PROP_TTY</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_TTY</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>File supports tty operations.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.Fd</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Low level I/O operations.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is not the class you want. Use <code>Stdio.File</code> and friends instead.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File</code>, <code>Stdio.FILE</code>, <code>_Stdio.Fd_ref</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_errno</b></span>
+
</dt>
+
<dd><p><code><code class='modifier'>protected</code> <code class='datatype'>int(0..)</code> _Stdio.Fd.<b><span class='variable'>_errno</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Variable containing the internal value returned by <code>errno()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>errno()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Fd</code> _Stdio.Fd.<b><span class='variable'>_fd</span></b></code></p></dd>
+
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Read only</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_read_callback</b></span><br>
+
<span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_write_callback</b></span><br>
+
<span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_read_oob_callback</b></span><br>
+
<span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_write_oob_callback</b></span><br>
+
<span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_fs_event_callback</b></span><br>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_read_callback</span></b></code><br>
+
<code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_write_callback</span></b></code><br>
+
<code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_read_oob_callback</span></b></code><br>
+
<code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_write_oob_callback</span></b></code><br>
+
<code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_fs_event_callback</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Callback functions installed by <code>Stdio.File()->set_callbacks()</code> et al.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><code class='datatype'>string</code> <code class='argument'>direction</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Close a file or stream.</p>
+
<p> If direction is not specified, both the read and the write
+
direction are closed. Otherwise only the directions specified is
+
closed.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> if the file or stream now is closed in
+
all directions, and <code class='expr'>0</code> otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>An exception is thrown if an I/O error occurs.</p>
+
<p> The default behaviour for sockets is typically to flush buffered
+
data in the background, but this can be changed with <code>linger()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>close()</code> has no effect if this file object has been associated
+
with an already opened file, i.e. if <code>open()</code> was given an
+
integer as the first argument.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>linger()</code>, <code>open()</code>, <code>open_socket()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code><b>)</b></code><br>
+
<code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code>, <code class='datatype'>string</code> <code class='argument'>src_addr</code>, <code class='datatype'>int</code> <code class='argument'>src_port</code><b>)</b></code><br>
+
<code><code class='datatype'>string(8bit)</code>|<code class='datatype'>int(0..0)</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code>, <code class='datatype'>string</code>|<code class='datatype'>int(0..0)</code> <code class='argument'>src_addr</code>, <code class='datatype'>int</code>|<code class='datatype'>int(0..0)</code> <code class='argument'>src_port</code>, <code class='datatype'>string(8bit)</code> <code class='argument'>data</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a TCP/IP connection to the specified destination.</p>
+
<p> In nonblocking mode, success is indicated with the write-callback,
+
and failure with the close-callback or the read_oob-callback.</p>
+
<p> If the <code>data</code> argument is included the socket will use
+
TCP_FAST_OPEN if available, if not the data will <i>not be
+
sent</i>. In the data case the function either returns the data
+
that has not been sent (only one packet can be sent with this
+
option) or 0 if the connection failed immediately.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> or the remaining <code class='expr'>data</code> on success, and
+
<code class='expr'>0</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and <code>errno()</code> set
+
to <tt>EWOULDBLOCK</tt> or <tt>WSAEWOULDBLOCK</tt>. This should not be regarded
+
as a connection failure.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect_unix</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a UNIX domain socket connection to the specified destination.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-filename'></span>Parameter <code class='parameter'>filename</code></dt>
+
<dd></dd><dd class='body--doc'><p>Filename to create.</p>
+
<p> In nonblocking mode, success is indicated with the write-callback,
+
and failure with the close-callback or the read_oob-callback.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and <code>errno()</code> set
+
to <tt>EWOULDBLOCK</tt> or <tt>WSAEWOULDBLOCK</tt>. This should not be regarded
+
as a connection failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>path</code> had a quite restrictive length limit (~100 characters)
+
prior to Pike 7.8.334.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br>
+
<code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code><br>
+
<code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code><br>
+
<code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>See <code>open()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.Fd</code> <b><span class='method'>dup</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Duplicate the file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>dup2()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup2</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>dup2</span>(</b><code class='object unresolved'>Stdio.File</code> <code class='argument'>to</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Duplicate a file over another.</p>
+
<p> This function works similarly to <code>assign()</code>, but instead of making
+
the argument a reference to the same file, it creates a new file
+
with the same properties and places it in the argument.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>to</code> need not be open, in which
+
case a new fd is allocated.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Note also that <code>to</code> is also assigned to the same backend (if any)
+
as this object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>assign()</code>, <code>dup()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the errno for the latest failed file operation.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>fd_factory</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Fd</code> <b><span class='method'>fd_factory</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Factory creating <code>Stdio.Fd</code> objects.</p>
+
<p> This function is called by <code>openat()</code>, <code>pipe()</code>, <code>dup()</code>
+
and other functions creating new file objects.</p>
+
<p> The default implementation calls <code class='expr'>object_program(this_object())()</code>
+
to create the new object, and returns the <code>Fd</code> inherit in it.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Note that this function must return the <code>Fd</code> inherit in the object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.Port()->fd_factory()</code>, <code>openat()</code>, <code>pipe()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_dir</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>get_dir</span>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>path</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get directory contents relative to an open directory.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-path'></span>Parameter <code class='parameter'>path</code></dt>
+
<dd></dd><dd class='body--doc'><p>Path relative to the open directory. Defaults to the
+
directory itself.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns an array of filenames.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Not available on all architectures.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>predef::get_dir()</code>, <code>statat()</code>, <code>openat()</code>, <code>unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>getxattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>getxattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the value of a specified attribute, or 0 if it does not exist</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>grantpt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>grantpt</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>If this file has been created by calling <code>openpt()</code>, return the
+
filename of the associated pts-file. This function should only be
+
called once.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the filename of the corresponding pts.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is only available on some platforms.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>is_open</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_open</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns true if the file is open.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>If the file is a socket that has been closed from the remote side,
+
this function might still return true.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Most methods can't be called for a file descriptor that isn't
+
open. Notable exceptions <code>errno</code>, <code>mode</code>, and the set and query
+
functions for callbacks and backend.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>linger</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>linger</span>(</b><code class='datatype'>int(-1..65535)</code>|<code class='datatype'>void</code> <code class='argument'>seconds</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the socket linger behaviour on <code>close()</code>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-seconds'></span>Parameter <code class='parameter'>seconds</code></dt>
+
<dd></dd><dd class='body--doc'><table class='box'><tr><td><code><code class='key'>-1</code></code></td><td><p>Reset to default behaviour. This typically means that
+
<code>close()</code> will return immediately, but any buffered
+
data will still be sent if possible.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>0</code></code></td><td><p>Terminate the connection immediately on <code>close()</code>,
+
and discard any buffered data.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>(1..65535)</code></code></td><td><p>Have <code>close()</code> wait for at most <code>seconds</code> seconds
+
for any buffered data to be sent after which the
+
connection is terminated.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This operation is only valid on sockets.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function was not available in Pike 7.8.775 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>close()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>listxattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>listxattr</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return an array of all extended attributes set on the file</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>lock</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>lock</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>lock</span>(</b><code class='datatype'>bool</code> <code class='argument'>is_recursive</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Makes an exclusive file lock on this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>trylock()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>mode</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>FileModeFlags</code>|<code class='object unresolved'>FilePropertyFlags</code> <b><span class='method'>mode</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the open mode and capabilities for the file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns an <code>`|()</code> of the following flags:</p>
+
<table class='box'><tr><td><code><code class='key'>0x1000</code></code></td><td><p><code>FILE_READ</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x2000</code></code></td><td><p><code>FILE_WRITE</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x4000</code></code></td><td><p><code>FILE_APPEND</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x8000</code></code></td><td><p><code>FILE_CREATE</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0100</code></code></td><td><p><code>FILE_TRUNC</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0200</code></code></td><td><p><code>FILE_EXCLUSIVE</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0400</code></code></td><td><p><code>FILE_NONBLOCKING</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0080</code></code></td><td><p><code>PROP_TTY</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0040</code></code></td><td><p><code>PROP_SEND_FD</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0010</code></code></td><td><p><code>PROP_BIDIRECTIONAL</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0008</code></code></td><td><p><code>PROP_BUFFERED</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0004</code></code></td><td><p><code>PROP_SHUTDOWN</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0002</code></code></td><td><p><code>PROP_NONBLOCK</code></p>
+
</td></tr>
+
<tr><td><code><code class='key'>0x0001</code></code></td><td><p><code>PROP_IPC</code></p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In some versions of Pike 7.8 the <tt>PROP_</tt> flags were
+
filtered from the result.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>open</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a file, or use an existing fd.</p>
+
<p> If <code>filename</code> is given, attempt to open the named file. If <code>fd</code>
+
is given instead, it should be the file descriptor for an already
+
opened file, which will then be used by this object.</p>
+
<p> <code>mode</code> describes how the file is opened. It's a case-insensitive
+
string consisting of one or more of the following letters:</p>
+
<dl class='group--doc'><dt>"r"</dt>
+
<dd><p>Open for reading.</p>
+
</dd>
+
<dt>"w"</dt>
+
<dd><p>Open for writing.</p>
+
</dd>
+
<dt>"a"</dt>
+
<dd><p>Append new data to the end.</p>
+
</dd>
+
<dt>"c"</dt>
+
<dd><p>Create the file if it doesn't exist already.</p>
+
</dd>
+
<dt>"t"</dt>
+
<dd><p>Truncate the file to zero length if it already contains data.
+
Use only together with <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt>"x"</dt>
+
<dd><p>Open exclusively - the open fails if the file already exists.
+
Use only together with <code class='expr'>"c"</code>. Note that it's not safe to
+
assume that this is atomic on some systems.</p>
+
</dd>
+
</dl><p><code>access</code> specifies the permissions to use if a new file is
+
created. It is a UNIX style permission bitfield:</p>
+
<dl class='group--doc'><dt>0400</dt>
+
<dd><p>User has read permission.</p>
+
</dd>
+
<dt>0200</dt>
+
<dd><p>User has write permission.</p>
+
</dd>
+
<dt>0100</dt>
+
<dd><p>User has execute permission.</p>
+
</dd>
+
<dt>0040</dt>
+
<dd><p>Group has read permission.</p>
+
</dd>
+
<dt>0020</dt>
+
<dd><p>Group has write permission.</p>
+
</dd>
+
<dt>0010</dt>
+
<dd><p>Group has execute permission.</p>
+
</dd>
+
<dt>0004</dt>
+
<dd><p>Others have read permission.</p>
+
</dd>
+
<dt>0002</dt>
+
<dd><p>Others have write permission.</p>
+
</dd>
+
<dt>0001</dt>
+
<dd><p>Others have execute permission.</p>
+
</dd>
+
</dl><p>It's system dependent on which of these bits that are actually
+
heeded. If <code>access</code> is not specified, it defaults to
+
<code class='expr'>00666</code>, but note that on UNIX systems it's masked with the
+
process umask before use.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns nonzero on success and <code class='expr'>0</code> (zero) on failure. If
+
there is a failure then <code>errno</code> returns the error code.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>close()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>open_socket</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>open_socket</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>addr</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>family_hint</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open a file relative to an opened directory.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns a new file object on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Not available on all architectures.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code>, <code>statat()</code>, <code>unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>openpt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>openpt</span>(</b><code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Open the master end of a pseudo-terminal pair.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns <code class='expr'>1</code> for success, <code class='expr'>0</code> otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>grantpt()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>peek</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code><b>)</b></code><br>
+
<code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code>, <code class='datatype'>int</code> <code class='argument'>not_eof</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check if there is data available to read,
+
or wait some time for available data to read.</p>
+
<p> More specifically, a later call to <code>read()</code> will return
+
immediately, either due to data being present, or due to
+
some error (eg if a socket has been closed).</p>
+
</dd>
+
<dt class='head--doc'><span id='p-timeout'></span>Parameter <code class='parameter'>timeout</code></dt>
+
<dd></dd><dd class='body--doc'><p>Timeout in seconds.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-not_eof'></span>Parameter <code class='parameter'>not_eof</code></dt>
+
<dd></dd><dd class='body--doc'><p>Flag for specifying handling of end of file.
+
The following values are currently defined:</p>
+
<table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Traditional (and default) behaviour. Return <code class='expr'>1</code>
+
at EOF.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>1</code></code></td><td><p>Regard EOF as an error. Return <code class='expr'>-1</code> and set <code>errno()</code>
+
to return <code class='expr'>EPIPE</code> at EOF.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><table class='box'><tr><td><code><code class='key'>1</code></code></td><td><p>There is data available to <code>read()</code>, or <code>not_eof</code> is
+
<code class='expr'>0</code> (zero) and we're at EOF. A later call to
+
<code>read()</code> will not block.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>0</code></code></td><td><p>There is no data available (ie timeout).</p>
+
</td></tr>
+
<tr><td><code><code class='key'>-1</code></code></td><td><p>Error condition. The error code returned by <code>errno()</code>
+
has been updated.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>errno()</code>, <code>read()</code></p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The function may be interrupted prematurely
+
of the timeout (due to signals);
+
check the timing manually if this is imporant.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>pipe</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>pipe</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>pipe</span>(</b><code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
</dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>proxy</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>proxy</span>(</b><code class='object unresolved'>Stdio.File</code> <code class='argument'>from</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Starts a thread that asynchronously copies data from <code>from</code>
+
to this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.sendfile()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><code class='datatype'>bool</code> <code class='argument'>local</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get address and port of a socket end-point.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-local'></span>Parameter <code class='parameter'>local</code></dt>
+
<dd></dd><dd class='body--doc'><p>If the argument <code>local</code> is not specified, or is <code class='expr'>0</code>
+
(zero), the remote end-point is returned. Otherwise, if <code>local</code>
+
is <code class='expr'>1</code>, the local end-point is returned.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns the address and port of a socket end-point
+
on the form <code class='expr'>"x.x.x.x port"</code> (IPv4) or
+
<code class='expr'>"x:x:x:x:x:x:x:x port"</code> (IPv6). IPv6 addresses
+
may use the contracted syntax.</p>
+
<p> If this file is not a socket, is not connected, or some other
+
error occurs, <code class='expr'>0</code> (zero) is returned and <code>errno()</code> will
+
return the error code.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>An error is thrown if the socket (or file) isn't open.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>connect()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_backend</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the backend used for the callbacks.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the file descriptor number associated with this object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_mtu</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_mtu</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get the Max Transfer Unit for the object (if any).</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><table class='box'><tr><td><code><code class='key'>-1</code></code></td><td><p>Returns <code class='expr'>-1</code> if the object is not a socket or
+
if the mtu is unknown.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>(1..)</code></code></td><td><p>Returns a positive value with the mtu on success.</p>
+
</td></tr>
+
</table></dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read data from a file or a stream.</p>
+
<p> Attempts to read <code>len</code> bytes from the file, and return it as a
+
string. Less than <code>len</code> bytes can be returned if:</p>
+
<ul>
+
<li><p>end-of-file is encountered for a normal file, or</p>
+
</li><li><p>it's a stream that has been closed from the other end, or</p>
+
</li><li><p>it's a stream in nonblocking mode, or</p>
+
</li><li><p>it's a stream and <code>not_all</code> is set, or</p>
+
</li><li><p><code>not_all</code> isn't set and an error occurred (see below).</p>
+
</li></ul><p>If <code>not_all</code> is nonzero, <code>read()</code> does not try its best to read
+
as many bytes as you have asked for, but merely returns as much as
+
the system read function returns. This is mainly useful with
+
stream devices which can return exactly one row or packet at a
+
time. If <code>not_all</code> is used in blocking mode, <code>read()</code> only
+
blocks if there's no data at all available.</p>
+
<p> If something goes wrong and <code>not_all</code> is set, zero is returned.
+
If something goes wrong and <code>not_all</code> is zero or left out, then
+
either zero or a string shorter than <code>len</code> is returned. If the
+
problem persists then a later call to <code>read()</code> fails and returns
+
zero, however.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero. That includes an end due to end-of-file or remote
+
close.</p>
+
<p> If no arguments are given, <code>read()</code> reads to the end of the file
+
or stream.</p>
+
<p> If any file descriptors have been sent by the other side of the
+
stream, <code>receive_fd()</code> will be called once for every sent file
+
descriptor.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It's not necessary to set <code>not_all</code> to avoid blocking reading
+
when nonblocking mode is used.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>When at the end of a file or stream, repeated calls to <code>read()</code>
+
will return the empty string since it's not considered an error.
+
The empty string is never returned in other cases, unless nonblocking
+
mode is used or <code>len</code> is zero.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read_oob()</code>, <code>write()</code>, <code>receive_fd()</code>, <code>send_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>read</span>(</b><code class='object unresolved'>System.Memory</code> <code class='argument'>dst</code>, <code class='datatype'>void</code>|<code class='datatype'>int(0..)</code> <code class='argument'>offset</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Reads data from a file or stream into the buffer <code>dst</code> at offset
+
<code>offset</code>. Tries to read as many bytes as buffer space available.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>The number of bytes read. Returns <code class='expr'>-1</code> on error and
+
<code>errno()</code> will return the corresponding error code.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>read</span>(</b><code class='object unresolved'>Stdio.Buffer</code>|<code class='object unresolved'>String.Buffer</code> <code class='argument'>dst</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Reads data from a file or stream into the buffer <code>dst</code>. Tries to
+
read as many bytes as buffer space available.
+
Will advance the write position in <code>dst</code> by the number of bytes
+
read.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>The number of bytes read. Returns <code class='expr'>-1</code> on error and
+
<code>errno()</code> will return the corresponding error code.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read_oob</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br>
+
<code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Attempts to read <code>len</code> bytes of out-of-band data from the stream,
+
and returns it as a string. Less than <code>len</code> bytes can be returned
+
if:</p>
+
<ul>
+
<li><p>the stream has been closed from the other end, or</p>
+
</li><li><p>nonblocking mode is used, or</p>
+
</li><li><p><code>not_all</code> is set, or</p>
+
</li><li><p><code>not_all</code> isn't set and an error occurred (see below).</p>
+
</li></ul><p>If <code>not_all</code> is nonzero, <code>read_oob()</code> only returns as many bytes
+
of out-of-band data as are currently available.</p>
+
<p> If something goes wrong and <code>not_all</code> is set, zero is returned.
+
If something goes wrong and <code>not_all</code> is zero or left out, then
+
either zero or a string shorter than <code>len</code> is returned. If the
+
problem persists then a later call to <code>read_oob()</code> fails and
+
returns zero, however.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero. That includes an end due to remote close.</p>
+
<p> If no arguments are given, <code>read_oob()</code> reads to the end of the
+
stream.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that all out-of-band data sent from the
+
other end is received. Most streams only allow for a single byte
+
of out-of-band data at a time.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It's not necessary to set <code>not_all</code> to avoid blocking reading
+
when nonblocking mode is used.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>When at the end of a file or stream, repeated calls to <code>read()</code>
+
returns the empty string since it's not considered an error. The
+
empty string is never returned in other cases, unless nonblocking
+
mode is used or <code>len</code> is zero.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code>, <code>write_oob()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>receive_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>receive_fd</span>(</b><code class='object unresolved'>Stdio.Fd</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remote file descriptor reception handler.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-fd'></span>Parameter <code class='parameter'>fd</code></dt>
+
<dd></dd><dd class='body--doc'><p>File descriptor received from the remote end of a <code>pipe()</code>.
+
This object has been created by <code>fd_factory()</code>.</p>
+
<p> This function is called from <code>read()</code> when a remote file
+
descriptor has been received over a <code>PROP_SEND_FD</code>
+
capable <code>pipe()</code>.</p>
+
<p> The default implementation is just a prototype.</p>
+
<p> Overload this function to enable reception of
+
remote file descriptors.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The capability of sending and receiving remote file
+
descriptors is only available on some operating systems.
+
This capability is indicated by the precence of <code>__HAVE_SEND_FD__</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>send_fd()</code>, <code>read()</code>, <code>fd_factory()</code>, <code>__HAVE_SEND_FD__</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>release_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>release_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the file descriptor number associated with this object, in
+
addition to releasing it so that this object behaves as if closed.
+
Other settings like callbacks and backend remain intact.
+
<code>take_fd</code> can later be used to reinstate the file descriptor so
+
that the state is restored.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_fd()</code>, <code>take_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>removexattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>removexattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remove the specified extended attribute.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>seek</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>offset</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>offset</code>, <code class='datatype'>string</code> <code class='argument'>whence</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>The seek() function repositions the offset of the open file
+
associated with the file descriptor fd to the argument <code>offset</code>
+
according to the directive <code>whence</code> as follows:</p>
+
<table class='box'><tr><td><code><code class='key'>Stdio.SEEK_SET</code></code></td><td><p>The offset is set to <code>offset</code> bytes.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>Stdio.SEEK_CUR</code></code></td><td><p>The offset is set to its current location plus <code>offset</code> bytes.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>Stdio.SEEK_END</code></code></td><td><p>The offset is set to the size of the file plus <code>offset</code> bytes.</p>
+
</td></tr>
+
</table><p>If <code>whence</code> is not specified it is SEEK_SET if <code>offset</code> is
+
positive, and if <code>offset</code> is negative SEEK_END.</p>
+
<p> The seek() function on most operating systems allows the file
+
offset to be set beyond the end of the file (but this does not
+
change the size of the file). If data is later written at this
+
point, subsequent reads of the data in the gap (a "hole") return
+
null bytes ('\0') until data is actually written into the gap.</p>
+
<p> Seeking file data and holes</p>
+
<p> Stdio.SEEK_DATA and Stdio.SEEK_HOLE are nonstandard extensions
+
present in Linux, Solaris, FreeBSD, and DragonFly BSD; they are
+
proposed for inclusion in the next POSIX revision.</p>
+
<table class='box'><tr><td><code><code class='key'>Stdio.SEEK_DATA</code></code></td><td><p>Adjust the file offset to the next location in the file greater
+
than or equal to offset containing data. If offset points to
+
data, then the file offset is set to offset.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>Stdio.SEEK_HOLE</code></code></td><td><p>Adjust the file offset to the next hole in the file greater than
+
or equal to offset. If offset points into the middle of a hole,
+
then the file offset is set to offset. If there is no hole past
+
offset, then the file offset is adjusted to the end of the file
+
(i.e., there is an implicit hole at the end of any file).</p>
+
</td></tr>
+
</table><p>In both of the above cases, seek() fails if offset points past the
+
end of the file.</p>
+
<p> These operations allow applications to map holes in a sparsely
+
allocated file. This can be useful for applications such as file
+
backup tools, which can save space when creating backups and
+
preserve holes, if they have a mechanism for discovering holes.</p>
+
<p> For the purposes of these operations, a hole is a sequence of
+
zeros that (normally) has not been allocated in the underlying
+
file storage. However, a filesystem is not obliged to report
+
holes, so these operations are not a guaranteed mechanism for
+
mapping the storage space actually allocated to a file.
+
(Furthermore, a sequence of zeros that actually has been written
+
to the underlying storage may or may not be reported as a hole.)</p>
+
<p> In the simplest implementation, a filesystem can support the
+
operations by making SEEK_HOLE always return the offset of the end
+
of the file, and making SEEK_DATA always return offset (i.e., even
+
if the location referred to by offset is a hole, it can be
+
considered to consist of data that is a sequence of zeros).</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Upon successful completion, seek() returns the resulting offset
+
location as measured in bytes from the beginning of the file. On
+
error, the value (off_t) -1 is returned and <code>errno</code> is set to
+
indicate the error.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>tell()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>seek</b></span>
+
</dt>
+
<dd><p><code><code class='modifier'>variant</code> <code class='deprecated'>__deprecated__</code> <code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>unit</code>, <code class='datatype'>int</code> <code class='argument'>mult</code><b>)</b></code><br>
+
<code><code class='modifier'>variant</code> <code class='deprecated'>__deprecated__</code> <code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>unit</code>, <code class='datatype'>int</code> <code class='argument'>mult</code>, <code class='datatype'>int</code> <code class='argument'>add</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Seek to a specified offset in a file.</p>
+
<p> If <code>mult</code> or <code>add</code> are specified, <code>pos</code> is calculated as
+
<code class='expr'><code>pos</code> = <code>unit</code>*<code>mult</code> + <code>add</code></code>.</p>
+
<p> If <code>pos</code> is negative then it is relative to the end of the file,
+
otherwise it's an absolute offset from the start of the file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns the new offset, or <code class='expr'>-1</code> on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The arguments <code>mult</code> and <code>add</code> are considered obsolete, and
+
should not be used.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>tell()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>send_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>send_fd</span>(</b><code class='object unresolved'>Stdio.Fd</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Queues an open file descriptor for sending to the other end of a stream.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The actual sending is performed at the next successful call
+
to <code>write()</code>, this is due to limitations in the system calls.
+
This means that it isn't possible to send a file descriptor
+
without also sending some in-band data.</p>
+
<p> This operation is only supported on <code>pipe()</code>'s created with
+
<code>PROP_SEND_FD</code>.</p>
+
<p> This function is not available on all operating systems, check
+
for <code>__HAVE_SEND_FD__</code>.</p>
+
<p> The queue is emptied on successful <code>write()</code> and when the
+
write direction is <code>close()</code>'d.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>receive_fd()</code>, <code>write()</code>, <code>pipe()</code>, <code>read()</code>, <code>__HAVE_SEND_FD__</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_backend</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the backend used for the callbacks.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The backend keeps a reference to this object only when it is in
+
callback mode. So if this object hasn't got any active callbacks
+
and it runs out of other references, it will still be destructed
+
quickly (after closing, if necessary).</p>
+
<p> Also, this object does not keep a reference to the backend.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_backend</code>, <code>set_nonblocking</code>, <code>set_read_callback</code>, <code>set_write_callback</code>, <code>set_fs_event_callback</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this file to blocking operation.</p>
+
<p> This is the inverse operation of <code>set_nonblocking()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_nonblocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_buffer</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set internal socket buffer.</p>
+
<p> This function sets the internal buffer size of a socket or stream.</p>
+
<p> The second argument allows you to set the read or write buffer by
+
specifying <code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that this function actually does anything,
+
but it certainly helps to increase data transfer speed when it does.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open_socket()</code>, <code>accept()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_close_on_exec</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_close_on_exec</span>(</b><code class='datatype'>bool</code> <code class='argument'>yes_no</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Marks the file as to be closed in spawned processes.</p>
+
<p> This function determines whether this file will be closed when
+
calling exec().</p>
+
<p> Default is that the file WILL be closed on exec except for
+
stdin, stdout and stderr.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Process.create_process()</code>, <code>exec()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_keepalive</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>set_keepalive</span>(</b><code class='datatype'>bool</code> <code class='argument'>on_off</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Equivalent to setsockopt(Stdio.SO_KEEPALIVE, on_off), but will set errno
+
if SO_KEEPALIVE is not supported, rather than issuing a compilation error
+
for the missing constant.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nodelay</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>set_nodelay</span>(</b><code class='datatype'>bool</code>|<code class='datatype'>void</code> <code class='argument'>state</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Control Nagle's Algorithm (RFC 896)</p>
+
</dd>
+
<dt class='head--doc'><span id='p-state'></span>Parameter <code class='parameter'>state</code></dt>
+
<dd></dd><dd class='body--doc'><table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Return to the normal state of using Nagle's Algorithm</p>
+
</td></tr>
+
<tr><td><code><code class='key'>1</code></code></td><td><p>(default) Disable Nagling - small writes will not be queued.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This operation is only valid on sockets.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p>setsockopt()</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this file to nonblocking operation.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Nonblocking operation is not supported on all Stdio.File objects.
+
Notably it is not guaranteed to be supported on objects returned
+
by <code>pipe()</code> unless <code>PROP_NONBLOCK</code> was specified in the call
+
to <code>pipe()</code>.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_blocking()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>setsockopt</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>setsockopt</span>(</b><code class='datatype'>int</code> <code class='argument'>level</code>, <code class='datatype'>int</code> <code class='argument'>opt</code>, <code class='datatype'>int</code> <code class='argument'>state</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set socket options like Stdio.SO_KEEPALIVE. This function is always
+
available; the presence or absence of the option constants indicates
+
availability of those features.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 if successful, 0 if not (and sets errno())</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_keepalive()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>setxattr</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>setxattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code>, <code class='datatype'>string</code> <code class='argument'>value</code>, <code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the attribute <code>attr</code> to the value <code>value</code>.</p>
+
<p> The flags parameter can be used to refine the semantics of the operation.</p>
+
<p> <code>Stdio.XATTR_CREATE</code> specifies a pure create, which
+
fails if the named attribute exists already.</p>
+
<p> <code>Stdio.XATTR_REPLACE</code> specifies a pure replace operation, which
+
fails if the named attribute does not already exist.</p>
+
<p> By default (no flags), the extended attribute will be created if need be,
+
or will simply replace the value if the attribute exists.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 if successful, 0 otherwise, setting errno.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>stat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stat</code> <b><span class='method'>stat</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get status for an open file.</p>
+
<p> This function returns the same information as the function
+
<code>file_stat()</code>, but for the file it is called in. If file is not
+
an open file, <code class='expr'>0</code> (zero) is returned. Zero is also returned
+
if file is a pipe or socket.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>See <code>file_stat()</code> for a description of the return value.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>file_stat()</code>, <code>statat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>statat</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stat</code> <b><span class='method'>statat</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>symlink</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get status for a file relative an open directory.</p>
+
<p> This function returns the same information as the function
+
<code>file_stat()</code>, but relative to the file it is called in. If file is not
+
an open file, <code class='expr'>0</code> (zero) is returned. Zero is also returned
+
if file is a pipe or socket.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>See <code>file_stat()</code> for a description of the return value.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Not available on all architectures.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>file_stat()</code>, <code>stat()</code>, <code>openat()</code>, <code>unlinkat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>sync</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>sync</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Flush buffers to disk.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) and sets errno on failure.</p>
+
<p> Returns <code class='expr'>1</code> on success.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>take_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>take_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Rehooks the given file descriptor number to be associated with
+
this object. As opposed to using <code>open</code> with a file descriptor
+
number, it will be closed by this object upon destruct or when
+
<code>close</code> is called.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>release_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>tell</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>tell</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the current offset in the file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>seek()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>truncate</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>truncate</span>(</b><code class='datatype'>int</code> <code class='argument'>length</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Truncate a file.</p>
+
<p> Truncates the file to the specified length <code>length</code>.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>trylock</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>trylock</span>(</b><b>)</b></code><br>
+
<code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>trylock</span>(</b><code class='datatype'>bool</code> <code class='argument'>is_recursive</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Attempts to place a file lock on this file.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>lock()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>unlinkat</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>unlinkat</span>(</b><code class='datatype'>string</code> <code class='argument'>f</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Remove a file or directory relative to an open file.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) on failure, <code class='expr'>1</code> otherwise.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>rm()</code>, <code>openat()</code>, <code>statat()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>data</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='object unresolved'>Stdio.Buffer</code>|<code class='object unresolved'>String.Buffer</code>|<code class='object unresolved'>System.Memory</code> <code class='argument'>data</code>, <code class='datatype'>void</code>|<code class='datatype'>int(0..)</code> <code class='argument'>offset</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write data to a file or a stream.</p>
+
<p> If there are any file descriptors that have been queued for sending
+
(with <code>send_fd()</code>), they will be sent.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-data'></span>Parameter <code class='parameter'>data</code></dt>
+
<dd></dd><dd class='body--doc'><p>Data to write.</p>
+
<p> If <code>data</code> is an array of strings, they are written in sequence.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-format'></span>Parameter <code class='parameter'>format</code></dt>
+
<dd></dd>
+
<dt class='head--doc'><span id='p-extras'></span>Parameter <code class='parameter'>extras</code></dt>
+
<dd></dd><dd class='body--doc'><p>If more than one argument is given, <code>sprintf()</code> is used to format
+
them using <code>format</code>. If <code>format</code> is an array, the strings in it
+
are concatenated and the result is used as format string.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-offset'></span>Parameter <code class='parameter'>offset</code></dt>
+
<dd></dd><dd class='body--doc'><p>The offset in data to start writing from.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Writes <code>data</code> and returns the number of bytes that were
+
actually written.</p>
+
<table class='box'><tr><td><code><code class='key'>(1..)</code></code></td><td><p>The number of bytes successfully written to the OS buffers.</p>
+
<p> This can be less than the size of the given data if eg:</p>
+
<ul>
+
<li><p>Some data was written successfully and then something went
+
wrong.</p>
+
<p> If only some data was written due to an error and that error
+
persists, then a later call to <code>write()</code> will fail and return
+
<code class='expr'>-1</code>.</p>
+
</li><li><p>Nonblocking mode is used and not all data could be written
+
without blocking.</p>
+
</li></ul>
+
</td></tr>
+
<tr><td><code><code class='key'>0</code></code></td><td><p>No bytes were written. This may be due to</p>
+
<ul>
+
<li><p><code>data</code> or the formatted data being the empty string.</p>
+
</li><li><p>Nonblocking mode is used and no data could be written
+
without blocking.</p>
+
</li></ul>
+
</td></tr>
+
<tr><td><code><code class='key'>-1</code></code></td><td><p>Something went wrong and no bytes were written.</p>
+
</td></tr>
+
</table><p>If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Writing of wide strings is not supported. You have to encode the
+
data somehow, e.g. with <code>string_to_utf8</code> or with one of the
+
charsets supported by <code>Charset.encoder</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The variant of this function using a buffer object does not release
+
the interpreter lock.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read()</code>, <code>write_oob()</code>, <code>send_fd()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>write_oob</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>write_oob</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>write_oob</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Write out-of-band data to a stream.</p>
+
<p> Writes out-of-band data to a stream and returns how many bytes
+
that were actually written. It can be less than the size of the
+
given data if some data was written successfully and then
+
something went wrong.</p>
+
<p> -1 is returned if something went wrong and no bytes were written.
+
If only some data was written due to an error and that error
+
persists, then a later call to <code>write_oob()</code> fails and returns
+
-1.</p>
+
<p> If everything went fine, a call to <code>errno()</code> directly afterwards
+
returns zero.</p>
+
<p> If more than one argument is given, <code>sprintf()</code> is used to format
+
them.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that all out-of-band data sent from the
+
other end is received. Most streams only allow for a single byte
+
of out-of-band data at a time. Some streams sends the rest of
+
the data as ordinary data.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>read_oob()</code>, <code>write()</code></p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.Fd_ref</b></h2>
+
</dt><dd><dl class='group--doc'>
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Proxy class that contains stub functions
+
that call the corresponding functions in
+
<code>Fd</code>.</p>
+
<p> Used by <code>Stdio.File</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is not the class you want. Use <code>Stdio.File</code> and friends instead.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>Stdio.File</code>, <code>Stdio.FILE</code>, <code>_Stdio.Fd</code></p>
+
</dd></dl>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Fd</code> _Stdio.Fd_ref.<b><span class='variable'>_fd</span></b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Object to which called functions are relayed.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Inherit</span>
+
<span class='homogen--name'><b>Fd</b></span>
+
</dt>
+
<dd><p><code><span class='datatype'>inherit Fd</span> : <span class='inherit'>Fd</span></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Fake inherit to propagate the documentation
+
from <code>_Stdio.Fd</code>.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.UDP</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>MSG_OOB</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.UDP.<code class='constant'>MSG_OOB</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Flag to specify to <code>read()</code> to read out of band packets.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Constant</span>
+
<span class='homogen--name'><b>MSG_PEEK</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>constant</code> _Stdio.UDP.<code class='constant'>MSG_PEEK</code></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Flag to specify to <code>read()</code> to cause it to not remove the packet
+
from the input buffer.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Variable</span>
+
<span class='homogen--name'><b>_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> _Stdio.UDP.<b><span class='variable'>_fd</span></b></code></p></dd>
+
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Read only</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>add_membership</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>add_membership</span>(</b><code class='datatype'>string</code> <code class='argument'>group</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>address</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Join a multicast group.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-group'></span>Parameter <code class='parameter'>group</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>group</code> contains the address of the multicast group the
+
application wants to join. It must be a valid multicast address.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-address'></span>Parameter <code class='parameter'>address</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>address</code> is the address of the local interface with which
+
the system should join to the multicast group. If not provided
+
the system will select an appropriate interface.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_ADD_MEMBERSHIP
+
and IPPROTO_IPV6 IPV6_JOIN_GROUP.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The <code>address</code> parameter is currently not supported for IPv6.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>drop_membership()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>address</code>, <code class='datatype'>string</code>|<code class='datatype'>bool</code> <code class='argument'>no_reuseaddr</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Binds a port for receiving or transmitting UDP.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-port'></span>Parameter <code class='parameter'>port</code></dt>
+
<dd></dd><dd class='body--doc'><p>Either a port number or the name of a service as listed in
+
<tt>/etc/services</tt>.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-address'></span>Parameter <code class='parameter'>address</code></dt>
+
<dd></dd><dd class='body--doc'><p>Local address to bind to.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-no_reuseaddr'></span>Parameter <code class='parameter'>no_reuseaddr</code></dt>
+
<dd></dd><dd class='body--doc'><p>If set to <code class='expr'>1</code>, Pike will not set the <code class='expr'>SO_REUSEADDR</code> option
+
on the UDP port.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code class='expr'>SO_REUSEADDR</code> is never applied when binding a random port
+
(<code class='expr'>bind(0)</code>).</p>
+
<p> In general, <code class='expr'>SO_REUSEADDR</code> is not desirable on UDP ports.
+
Unless used for receiving multicast, be sure to never bind a
+
non-random port without setting <code class='expr'>no_reuseaddr</code> to <code class='expr'>1</code>.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws error when unable to bind port.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>close</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Closes an open UDP port.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This method was introduced in Pike 7.5.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>connect</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>address</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Establish an UDP connection.</p>
+
<p> This function connects an UDP socket previously created with
+
<code>Stdio.UDP()</code> to a remote socket. The <code>address</code> is the IP name or
+
number for the remote machine.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, <code class='expr'>0</code> (zero) otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>If the socket is in nonblocking mode, you have to wait
+
for a write or close callback before you know if the connection
+
failed or not.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind()</code>, <code>query_address()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>drop_membership</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>drop_membership</span>(</b><code class='datatype'>string</code> <code class='argument'>group</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>address</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Leave a multicast group.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-group'></span>Parameter <code class='parameter'>group</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>group</code> contains the address of the multicast group the
+
application wants to join. It must be a valid multicast address.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-address'></span>Parameter <code class='parameter'>address</code></dt>
+
<dd></dd><dd class='body--doc'><p><code>address</code> is the address of the local interface with which
+
the system should join to the multicast group. If not provided
+
the system will select an appropriate interface.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_DROP_MEMBERSHIP
+
and IPPROTO_IPV6 IPV6_LEAVE_GROUP.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The <code>address</code> parameter is currently not supported for IPv6.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>add_membership()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>dup</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.UDP</code> <b><span class='method'>dup</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Duplicate the udp socket.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>fd_factory()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable_broadcast</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>enable_broadcast</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the broadcast flag.
+
If enabled then sockets receive packets sent to a broadcast
+
address and they are allowed to send packets to a
+
broadcast address.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, <code class='expr'>0</code> (zero) otherwise.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This is normally only avalable to root users.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>enable_multicast</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>enable_multicast</span>(</b><code class='datatype'>string</code> <code class='argument'>reply_address</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the local device for a multicast socket.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-reply_address'></span>Parameter <code class='parameter'>reply_address</code></dt>
+
<dd></dd><dd class='body--doc'><p>Local address that should appear in the multicast packets.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_MULTICAST_IF
+
and IPPROTO_IPV6 IPV6_MULTICAST_IF.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the error code for the last command on this object.
+
Error code is normally cleared when a command is successful.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>fd_factory</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>fd_factory</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Factory creating <code>Stdio.UDP</code> objects.</p>
+
<p> This function is called by <code>dup()</code>
+
and other functions creating new UDP objects.</p>
+
<p> The default implementation calls <code class='expr'>object_program(this_object())()</code>
+
to create the new object, and returns the <code>UDP</code> inherit in it.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Note that this function must return the <code>UDP</code> inherit in the object.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>dup()</code>, <code>Stdio.File()->fd_factory()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>get_type</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>get_type</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns socket type and protocol family.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the local address of a socket on the form "x.x.x.x port".
+
If this file is not a socket, not connected or some other error occurs,
+
zero is returned.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_backend</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the backend used for the read callback.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Gets the file descriptor for this UDP port.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_mtu</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_mtu</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get the Max Transfer Unit for the object (if any).</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><table class='box'><tr><td><code><code class='key'>-1</code></code></td><td><p>Returns <code class='expr'>-1</code> if the object is not a socket or
+
if the mtu is unknown.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>(1..)</code></code></td><td><p>Returns a positive value with the mtu on success.</p>
+
</td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The returned value is adjusted to take account for the
+
IP and UDP headers, so that it should be usable without
+
further adjustment unless further IP options are in use.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>read</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>int</code>|<code class='datatype'>string</code>) <b><span class='method'>read</span>(</b><b>)</b></code><br>
+
<code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>int</code>|<code class='datatype'>string</code>) <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>flag</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Read from the UDP socket.</p>
+
<p> Flag <code>flag</code> is a bitfield, 1 for out of band data and 2 for peek</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>mapping(string:int|string) in the form
+
([
+
"data" : string received data
+
"ip" : string received from this ip
+
"port" : int ...and this port
+
])</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_read_callback()</code>, <code>MSG_OOB</code>, <code>MSG_PEEK</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>send</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>send</span>(</b><code class='datatype'>string</code> <code class='argument'>to</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code> <code class='argument'>message</code><b>)</b></code><br>
+
<code><code class='datatype'>int</code> <b><span class='method'>send</span>(</b><code class='datatype'>string</code> <code class='argument'>to</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code> <code class='argument'>message</code>, <code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Send data to a UDP socket.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-to'></span>Parameter <code class='parameter'>to</code></dt>
+
<dd></dd><dd class='body--doc'><p>The recipient address. For <code>connect()</code>ed objects specifying a
+
recipient of either <code>UNDEFINED</code> or <code class='expr'>""</code> causes the default
+
recipient to be used.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-port'></span>Parameter <code class='parameter'>port</code></dt>
+
<dd></dd><dd class='body--doc'><p>The recipient port number. For <code>connect()</code>ed objects specifying
+
port number <code class='expr'>0</code> casues the default recipient port to be used.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-flag'></span>Parameter <code class='parameter'>flag</code></dt>
+
<dd></dd><dd class='body--doc'><p>A flag bitfield with <code class='expr'>1</code> for out of band data and
+
<code class='expr'>2</code> for don't route flag.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><table class='box'><tr><td><code><code class='key'>(0..)</code></code></td><td><p>The number of bytes that were actually written.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>(..-1)</code></code></td><td><p>Failed to send the <code>message</code>. Check <code>errno()</code> for
+
the cause. Common causes are:</p>
+
<table class='box'><tr><td><code><code class='key'>System.EMSGSIZE</code></code></td><td><p>The <code>message</code> is too large to send unfragmented.</p>
+
</td></tr>
+
<tr><td><code><code class='key'>System.EWOULDBLOCK</code></code></td><td><p>The send buffers are full.</p>
+
</td></tr>
+
</table></td></tr>
+
</table>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>Throws errors on invalid arguments and uninitialized object.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Versions of Pike prior to 8.1.5 threw errors also on EMSGSIZE
+
(<code class='expr'>"Too big message"</code>) and EWOULDBLOCK
+
(<code class='expr'>"Message would block."</code>). These versions of Pike also
+
did not update the object errno on this function failing.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>Versions of Pike prior to 8.1.13 did not support the default
+
recipient for <code>connect()</code>ed objects.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>connect()</code>, <code>errno()</code>, <code>query_mtu()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_backend</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the backend used for the read callback.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The backend keeps a reference to this object as long as there can
+
be calls to the read callback, but this object does not keep a
+
reference to the backend.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_blocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>object</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this object to be blocking.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_buffer</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br>
+
<code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set internal socket buffer.</p>
+
<p> This function sets the internal buffer size of a socket or stream.</p>
+
<p> The second argument allows you to set the read or write buffer by
+
specifying <code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>It is not guaranteed that this function actually does anything,
+
but it certainly helps to increase data transfer speed when it does.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>open_socket()</code>, <code>accept()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_fd</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>set_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Use the file descriptor <code>fd</code> for UDP.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_multicast_ttl</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>set_multicast_ttl</span>(</b><code class='datatype'>int</code> <code class='argument'>ttl</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the time-to-live value of outgoing multicast packets
+
for this socket.</p>
+
</dd>
+
<dt class='head--doc'><span id='p-ttl'></span>Parameter <code class='parameter'>ttl</code></dt>
+
<dd></dd><dd class='body--doc'><p>The number of router hops sent multicast packets should
+
survive.</p>
+
<p> It is very important for multicast packets to set the
+
smallest TTL possible. The default before calling this
+
function is 1 which means that multicast packets don't
+
leak from the local network unless the user program
+
explicitly requests it.</p>
+
<p> See also the Unix man page for setsocketopt IPPROTO_IP IP_MULTICAST_TTL
+
and IPPROTO_IPV6 IPV6_MULTICAST_HOPS.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function did not support IPv6 in Pike 7.8 and earlier.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>add_membership()</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_nonblocking</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>object</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>)|<code class='datatype'>void</code> <code class='argument'>rcb</code>, <code class='datatype'>function</code>(:<code class='datatype void'>void</code>)|<code class='datatype'>void</code> <code class='argument'>wcb</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets this object to be nonblocking and the read and write callbacks.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_type</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>set_type</span>(</b><code class='datatype'>int</code> <code class='argument'>sock_type</code><b>)</b></code><br>
+
<code><code class='object unresolved'>UDP</code> <b><span class='method'>set_type</span>(</b><code class='datatype'>int</code> <code class='argument'>sock_type</code>, <code class='datatype'>int</code> <code class='argument'>family</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Sets socket type and protocol family.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>wait</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>bool</code> <b><span class='method'>wait</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Check for data and wait max. <code>timeout</code> seconds.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>Returns <code class='expr'>1</code> if data are ready, <code class='expr'>0</code> (zero) otherwise.</p>
+
</dd></dl>
+
</dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio._port</b></h2>
+
</dt><dd>
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>accept</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>accept</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get the first connection request waiting for this port and return
+
it as a connected socket.</p>
+
<p> If no connection request is waiting and the port is in nonblocking
+
mode (i.e. an accept callback is installed) then zero is returned.
+
Otherwise this function waits until a connection has arrived.</p>
+
<p> In Pike 7.8 and later the returned object is created via <code>fd_factory()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 7.7 and later the resulting file object will be assigned
+
to the same backend as the port object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>ip</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>reuse_port</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Opens a socket and binds it to port number on the local machine.
+
If the second argument is present, the socket is set to
+
nonblocking and the callback funcition is called whenever
+
something connects to it. The callback will receive the id for
+
this port as argument and should typically call <code>accept</code> to
+
establish a connection.</p>
+
<p> If the optional argument <code>ip</code> is given, <code>bind</code> will try to bind
+
to an interface with that host name or IP number. Omitting this
+
will bind to all available IPv4 addresses; specifying "::" will
+
bind to all IPv4 and IPv6 addresses.</p>
+
<p> If the OS supports TCP_FASTOPEN it is enabled automatically.</p>
+
<p> If the OS supports SO_REUSEPORT it is enabled if the fourth argument is true.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 is returned on success, zero on failure. <code>errno</code> provides
+
further details about the error in the latter case.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>accept</code>, <code>set_id</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>bind_unix</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>bind_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Opens a Unix domain socket at the given path in the file system.
+
If the second argument is present, the socket is set to
+
nonblocking and the callback funcition is called whenever
+
something connects to it. The callback will receive the id for
+
this port as argument and should typically call <code>accept</code> to
+
establish a connection.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>1 is returned on success, zero on failure. <code>errno</code> provides
+
further details about the error in the latter case.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is only available on systems that support Unix domain
+
sockets.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p><code>path</code> had a quite restrictive length limit (~100 characters)
+
prior to Pike 7.8.334.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>accept</code>, <code>set_id</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>close</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>close</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Closes the socket.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>create</b></span>
+
</dt>
+
<dd><p><code><span class='object'>_Stdio._port</span> <span class='class'>_Stdio._port</span><b>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>ip</code><b>)</b></code><br>
+
<code><span class='object'>_Stdio._port</span> <span class='class'>_Stdio._port</span><b>(</b><code class='argument'>"stdin"</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>When called with an int or any string except <code class='expr'>"stdin"</code> as
+
first argument, this function does the same as <code>bind()</code> would do
+
with the same arguments.</p>
+
<p> When called with <code class='expr'>"stdin"</code> as argument, a socket is created
+
out of the file descriptor 0. This is only useful if that actually
+
IS a socket to begin with, and is equivalent to creating a port and
+
initializing it with <code>listen_fd</code>(0).</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code>, <code>listen_fd</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>errno</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>If the last call done on this port failed, this function will
+
return an integer describing what went wrong. Refer to your unix
+
manual for further information.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>listen_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>listen_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>accept_callback</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function does the same as <code>bind</code>, except that instead of
+
creating a new socket and bind it to a port, it expects the file
+
descriptor <code>fd</code> to be an already open port.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>This function is only for the advanced user, and is generally used
+
when sockets are passed to Pike at exec time.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>bind</code>, <code>accept</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_address</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Get the address and port of the local socket end-point.</p>
+
</dd>
+
<dt class='head--doc'>Returns</dt>
+
<dd class='body--doc'><p>This function returns the address and port of a socket end-point
+
on the form <code class='expr'>"x.x.x.x port"</code> (IPv4) or
+
<code class='expr'>"x:x:x:x:x:x:x:x port"</code> (IPv6).</p>
+
<p> If there is some error querying or formatting the address,
+
<code class='expr'>0</code> (zero) is returned and <code>errno()</code> will return the
+
error code.</p>
+
</dd>
+
<dt class='head--doc'>Throws</dt>
+
<dd class='body--doc'><p>An error is thrown if the socket isn't bound.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_backend</b></span>
+
</dt>
+
<dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Return the backend used for the accept callback.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_fd</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_fd</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Returns the file descriptor number associated with this object.</p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>query_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>query_id</span>(</b><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function returns the id for this port. The id is normally the
+
first argument to accept_callback.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>set_id</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_backend</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>Set the backend used for the accept callback.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>The backend keeps a reference to this object as long as the port
+
is accepting connections, but this object does not keep a
+
reference to the backend.</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_backend</code></p>
+
</dd></dl>
+
+
+
<hr />
+
<dl class='group--doc'>
+
<dt class='head--type'><span class='homogen--type'>Method</span>
+
<span class='homogen--name'><b>set_id</b></span>
+
</dt>
+
<dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>set_id</span>(</b><code class='datatype'>mixed</code> <code class='argument'>id</code><b>)</b></code></p></dd>
+
+
<dt class='head--doc'>Description</dt>
+
<dd class='body--doc'><p>This function sets the id used for accept_callback by this port.
+
The default id is <code>this_object()</code>.</p>
+
</dd>
+
<dt class='head--doc'>Note</dt>
+
<dd class='body--doc'><p>In Pike 8.0 and earlier the default value was <code class='expr'>0</code> (zero)
+
(even though it was documented as above).</p>
+
</dd>
+
<dt class='head--doc'>See also</dt>
+
<dd class='body--doc'><p><code>query_id</code></p>
+
</dd></dl>
</dd></dl></dd></dl><dl><dt><h2 class='header'>Module <b class='ms datatype'>__builtin</b></h2> </dt><dd><dl><dt><h2 class='header'>Class <b class='ms datatype'>__builtin.Stack</b></h2> </dt><dd><dl class='group--doc'> <dt class='head--doc'>Description</dt> <dd class='body--doc'><p>This class implements a simple stack. Instead of adding and removing elements to an array, and thus making it vary in size for every push and pop operation, this stack tries to keep the stack size constant. If however the stack risks to overflow, it will allocate double its current size, i.e. pushing an element on an full 32 slot stack will result in a 64 slot stack with 33 elements.</p>