diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:15 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:15 -0400 |
| commit | 253e67c8b3a72b3a4757fdbc5845297628db0a4a (patch) | |
| tree | adf53b66087aa30dfbf8bf391a1dadb044c3bf4d /static/netbsd/man9/sockopt.9 3.html | |
| parent | a9157ce950dfe2fc30795d43b9d79b9d1bffc48b (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.html | 157 |
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> + — <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 + <<a class="In">sys/socketvar.h</a>></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> |
