summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/sockopt.9 3.html
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:15 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:15 -0400
commit253e67c8b3a72b3a4757fdbc5845297628db0a4a (patch)
treeadf53b66087aa30dfbf8bf391a1dadb044c3bf4d /static/netbsd/man9/sockopt.9 3.html
parenta9157ce950dfe2fc30795d43b9d79b9d1bffc48b (diff)
docs: Added All NetBSD Manuals
Diffstat (limited to 'static/netbsd/man9/sockopt.9 3.html')
-rw-r--r--static/netbsd/man9/sockopt.9 3.html157
1 files changed, 157 insertions, 0 deletions
diff --git a/static/netbsd/man9/sockopt.9 3.html b/static/netbsd/man9/sockopt.9 3.html
new file mode 100644
index 00000000..75fa4080
--- /dev/null
+++ b/static/netbsd/man9/sockopt.9 3.html
@@ -0,0 +1,157 @@
+<table class="head">
+ <tr>
+ <td class="head-ltitle">SOCKOPT(9)</td>
+ <td class="head-vol">Kernel Developer's Manual</td>
+ <td class="head-rtitle">SOCKOPT(9)</td>
+ </tr>
+</table>
+<div class="manual-text">
+<section class="Sh">
+<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
+<p class="Pp"><code class="Nm">sockopt_init</code>,
+ <code class="Nm">sockopt_destroy</code>,
+ <code class="Nm">sockopt_get</code>, <code class="Nm">sockopt_getint</code>,
+ <code class="Nm">sockopt_set</code>, <code class="Nm">sockopt_setint</code>
+ &#x2014; <span class="Nd">socket options handling</span></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
+<p class="Pp"><code class="In">#include
+ &lt;<a class="In">sys/socketvar.h</a>&gt;</code></p>
+<p class="Pp"><var class="Ft">void</var>
+ <br/>
+ <code class="Fn">sockopt_init</code>(<var class="Fa" style="white-space: nowrap;">struct
+ sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">int
+ level</var>, <var class="Fa" style="white-space: nowrap;">int name</var>,
+ <var class="Fa" style="white-space: nowrap;">size_t size</var>);</p>
+<p class="Pp"><var class="Ft">void</var>
+ <br/>
+ <code class="Fn">sockopt_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct
+ sockopt *sopt</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sockopt_get</code>(<var class="Fa" style="white-space: nowrap;">struct
+ sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">void
+ *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
+ size</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sockopt_getint</code>(<var class="Fa" style="white-space: nowrap;">struct
+ sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">int
+ *value</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sockopt_set</code>(<var class="Fa" style="white-space: nowrap;">struct
+ sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">const void
+ *value</var>, <var class="Fa" style="white-space: nowrap;">size_t
+ size</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sockopt_setint</code>(<var class="Fa" style="white-space: nowrap;">struct
+ sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">int
+ value</var>);</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
+<p class="Pp">The <var class="Ft">sockopt</var> structure is used to pass a
+ socket option and associated value:</p>
+<div class="Bd Pp Bd-indent Li">
+<pre>struct sockopt {
+ int sopt_level; /* option level */
+ int sopt_name; /* option name */
+ size_t sopt_size; /* data length */
+ size_t sopt_retsize; /* returned data length */
+ void * sopt_data; /* data pointer */
+ uint8_t sopt_buf[sizeof(int)]; /* internal storage */
+};</pre>
+</div>
+<p class="Pp">The internal storage is used for the common case of values up to
+ integer size so that memory allocation is not required and sopt_data will
+ point to this in that case.</p>
+<p class="Pp">Rather than provide accessor functions, the
+ <var class="Ft">sockopt</var> structure is public and the contents are
+ expected to be internally consistent, but the normal practice would be to
+ use the appropriate methods for storage and retrieval of values where a
+ known datatype is expected, as the size will be verified.</p>
+<p class="Pp">Note: a sockopt structure may only be used for a single
+ level/name/size combination. If the structure is to be re-used, it must be
+ destroyed and re-initialized with the new values.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="OPTIONS"><a class="permalink" href="#OPTIONS">OPTIONS</a></h1>
+<dl class="Bl-tag">
+ <dt><code class="Cd">options DIAGNOSTIC</code></dt>
+ <dd>Kernels compiled with the <code class="Dv">DIAGNOSTIC</code> option will
+ perform basic sanity checks on socket options operations.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
+<dl class="Bl-tag">
+ <dt id="sockopt_init"><a class="permalink" href="#sockopt_init"><code class="Fn">sockopt_init</code></a>(<var class="Fa">sopt</var>,
+ <var class="Fa">level</var>, <var class="Fa">name</var>,
+ <var class="Fa">size</var>)</dt>
+ <dd>Initialise sockopt storage. If <var class="Ar">size</var> is given,
+ <code class="Fn">sockopt_init</code>() will arrange for sopt_data to point
+ to a buffer of <var class="Ar">size</var> bytes for the sockopt value.
+ Where memory needs to be allocated to satisfy this,
+ <code class="Fn">sockopt_init</code>() may sleep.</dd>
+ <dt id="sockopt_destroy"><a class="permalink" href="#sockopt_destroy"><code class="Fn">sockopt_destroy</code></a>(<var class="Fa">sopt</var>)</dt>
+ <dd>Destroy sockopt storage, releasing any allocated memory.</dd>
+ <dt id="sockopt_get"><a class="permalink" href="#sockopt_get"><code class="Fn">sockopt_get</code></a>(<var class="Fa">sopt</var>,
+ <var class="Fa">value</var>, <var class="Fa">size</var>)</dt>
+ <dd>Copy out sockopt value. Will return <code class="Er">EINVAL</code> if an
+ incorrect data size is given.</dd>
+ <dt id="sockopt_getint"><a class="permalink" href="#sockopt_getint"><code class="Fn">sockopt_getint</code></a>(<var class="Fa">sopt</var>,
+ <var class="Fa">value</var>)</dt>
+ <dd>Common case of get sockopt integer value. Will return
+ <code class="Er">EINVAL</code> if sockopt does not contain an integer
+ sized value.</dd>
+ <dt><code class="Fn">sockopt_set</code>(<var class="Fa">sopt</var>,
+ <var class="Fa">value</var>, <var class="Fa">size</var>)</dt>
+ <dd>Copy in sockopt value. The sockopt structure must contain a data field of
+ <var class="Ar">size</var> bytes or be previously unset, in which case a
+ data buffer may be allocated using <a class="Xr">kmem_alloc(9)</a> with
+ the <code class="Dv">KM_NOSLEEP</code> flag which may cause
+ <code class="Fn">sockopt_set</code>() to return
+ <code class="Er">ENOMEM</code>.
+ <p class="Pp" id="sockopt_set">Note: If you need to use
+ <a class="permalink" href="#sockopt_set"><code class="Fn">sockopt_set</code></a>()
+ in a context where memory allocation may be required and you do not wish
+ to contemplate failure, the sockopt structure can be initialised in a
+ more suitable context using <code class="Fn">sockopt_init</code>() which
+ will not fail.</p>
+ </dd>
+ <dt id="sockopt_setint"><a class="permalink" href="#sockopt_setint"><code class="Fn">sockopt_setint</code></a>(<var class="Fa">sopt</var>,
+ <var class="Fa">value</var>)</dt>
+ <dd>Common case of set sockopt integer value. The sockopt structure must
+ contain an int sized data field or be previously unset, in which case the
+ data pointer will be set to the internal storage.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE
+ REFERENCES</a></h1>
+<p class="Pp">The function prototypes and sockopt structure are defined in the
+ <span class="Pa">sys/sys/socketvar.h</span> header file, and the socket
+ options implementation is in
+ <span class="Pa">sys/kern/uipc_socket.c</span>.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+ ALSO</a></h1>
+<p class="Pp"><a class="Xr">errno(2)</a>, <a class="Xr">kmem(9)</a></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
+<p class="Pp">The socket options KPI was inspired by a similar KPI in
+ <span class="Ux">FreeBSD</span> and first appeared in
+ <span class="Ux">NetBSD 5.0</span>.</p>
+</section>
+</div>
+<table class="foot">
+ <tr>
+ <td class="foot-date">January 3, 2018</td>
+ <td class="foot-os">NetBSD 10.1</td>
+ </tr>
+</table>