23
23
This enables context-based security for networking.
24
24
There is no need for this to map 1:1 to a physical network interface.
25
25
<p >FYI, In the future this will be replaced by handle types.</p >
26
- <h4 ><a name =" ipv6_address " ><code >tuple ipv6-address</code ></a ></h4 >
27
- <h5 >Tuple Fields</h5 >
28
- <ul >
29
- <li ><a name =" ipv6_address.0 " ><code >0</code ></a >: <code >u16</code ></li >
30
- <li ><a name =" ipv6_address.1 " ><code >1</code ></a >: <code >u16</code ></li >
31
- <li ><a name =" ipv6_address.2 " ><code >2</code ></a >: <code >u16</code ></li >
32
- <li ><a name =" ipv6_address.3 " ><code >3</code ></a >: <code >u16</code ></li >
33
- <li ><a name =" ipv6_address.4 " ><code >4</code ></a >: <code >u16</code ></li >
34
- <li ><a name =" ipv6_address.5 " ><code >5</code ></a >: <code >u16</code ></li >
35
- <li ><a name =" ipv6_address.6 " ><code >6</code ></a >: <code >u16</code ></li >
36
- <li ><a name =" ipv6_address.7 " ><code >7</code ></a >: <code >u16</code ></li >
37
- </ul >
38
- <h4 ><a name =" ipv6_socket_address " ><code >record ipv6-socket-address</code ></a ></h4 >
39
- <h5 >Record Fields</h5 >
40
- <ul >
41
- <li ><a name =" ipv6_socket_address.port " ><code >port</code ></a >: <code >u16</code ></li >
42
- <li ><a name =" ipv6_socket_address.flow_info " ><code >flow-info</code ></a >: <code >u32</code ></li >
43
- <li ><a name =" ipv6_socket_address.address " ><code >address</code ></a >: <a href =" #ipv6_address " ><a href =" #ipv6_address " ><code >ipv6-address</code ></a ></a ></li >
44
- <li ><a name =" ipv6_socket_address.scope_id " ><code >scope-id</code ></a >: <code >u32</code ></li >
45
- </ul >
46
- <h4 ><a name =" ipv4_address " ><code >tuple ipv4-address</code ></a ></h4 >
47
- <h5 >Tuple Fields</h5 >
48
- <ul >
49
- <li ><a name =" ipv4_address.0 " ><code >0</code ></a >: <code >u8</code ></li >
50
- <li ><a name =" ipv4_address.1 " ><code >1</code ></a >: <code >u8</code ></li >
51
- <li ><a name =" ipv4_address.2 " ><code >2</code ></a >: <code >u8</code ></li >
52
- <li ><a name =" ipv4_address.3 " ><code >3</code ></a >: <code >u8</code ></li >
53
- </ul >
54
- <h4 ><a name =" ipv4_socket_address " ><code >record ipv4-socket-address</code ></a ></h4 >
55
- <h5 >Record Fields</h5 >
56
- <ul >
57
- <li ><a name =" ipv4_socket_address.port " ><code >port</code ></a >: <code >u16</code ></li >
58
- <li ><a name =" ipv4_socket_address.address " ><code >address</code ></a >: <a href =" #ipv4_address " ><a href =" #ipv4_address " ><code >ipv4-address</code ></a ></a ></li >
59
- </ul >
60
- <h4 ><a name =" ip_socket_address " ><code >variant ip-socket-address</code ></a ></h4 >
61
- <h5 >Variant Cases</h5 >
62
- <ul >
63
- <li ><a name =" ip_socket_address.ipv4 " ><code >ipv4</code ></a >: <a href =" #ipv4_socket_address " ><a href =" #ipv4_socket_address " ><code >ipv4-socket-address</code ></a ></a ></li >
64
- <li ><a name =" ip_socket_address.ipv6 " ><code >ipv6</code ></a >: <a href =" #ipv6_socket_address " ><a href =" #ipv6_socket_address " ><code >ipv6-socket-address</code ></a ></a ></li >
65
- </ul >
66
- <h4 ><a name =" ip_address_family " ><code >enum ip-address-family</code ></a ></h4 >
67
- <h5 >Enum Cases</h5 >
68
- <ul >
69
- <li >
70
- <p ><a name =" ip_address_family.ipv4 " ><code >ipv4</code ></a ></p >
71
- <p >Similar to `AF_INET` in POSIX.
72
- </li >
73
- <li >
74
- <p ><a name =" ip_address_family.ipv6 " ><code >ipv6</code ></a ></p >
75
- <p >Similar to `AF_INET6` in POSIX.
76
- </li >
77
- </ul >
78
- <h4 ><a name =" ip_address " ><code >variant ip-address</code ></a ></h4 >
79
- <h5 >Variant Cases</h5 >
80
- <ul >
81
- <li ><a name =" ip_address.ipv4 " ><code >ipv4</code ></a >: <a href =" #ipv4_address " ><a href =" #ipv4_address " ><code >ipv4-address</code ></a ></a ></li >
82
- <li ><a name =" ip_address.ipv6 " ><code >ipv6</code ></a >: <a href =" #ipv6_address " ><a href =" #ipv6_address " ><code >ipv6-address</code ></a ></a ></li >
83
- </ul >
84
26
<h4 ><a name =" error_code " ><code >enum error-code</code ></a ></h4 >
85
27
<p >Error codes.</p >
86
28
<p >In theory, every API can return any error code.
@@ -230,6 +172,64 @@ combined with a couple of errors that are always possible:</p>
230
172
<p >A permanent failure in name resolution occurred.
231
173
</li >
232
174
</ul >
175
+ <h4 ><a name =" ip_address_family " ><code >enum ip-address-family</code ></a ></h4 >
176
+ <h5 >Enum Cases</h5 >
177
+ <ul >
178
+ <li >
179
+ <p ><a name =" ip_address_family.ipv4 " ><code >ipv4</code ></a ></p >
180
+ <p >Similar to `AF_INET` in POSIX.
181
+ </li >
182
+ <li >
183
+ <p ><a name =" ip_address_family.ipv6 " ><code >ipv6</code ></a ></p >
184
+ <p >Similar to `AF_INET6` in POSIX.
185
+ </li >
186
+ </ul >
187
+ <h4 ><a name =" ipv4_address " ><code >tuple ipv4-address</code ></a ></h4 >
188
+ <h5 >Tuple Fields</h5 >
189
+ <ul >
190
+ <li ><a name =" ipv4_address.0 " ><code >0</code ></a >: <code >u8</code ></li >
191
+ <li ><a name =" ipv4_address.1 " ><code >1</code ></a >: <code >u8</code ></li >
192
+ <li ><a name =" ipv4_address.2 " ><code >2</code ></a >: <code >u8</code ></li >
193
+ <li ><a name =" ipv4_address.3 " ><code >3</code ></a >: <code >u8</code ></li >
194
+ </ul >
195
+ <h4 ><a name =" ipv6_address " ><code >tuple ipv6-address</code ></a ></h4 >
196
+ <h5 >Tuple Fields</h5 >
197
+ <ul >
198
+ <li ><a name =" ipv6_address.0 " ><code >0</code ></a >: <code >u16</code ></li >
199
+ <li ><a name =" ipv6_address.1 " ><code >1</code ></a >: <code >u16</code ></li >
200
+ <li ><a name =" ipv6_address.2 " ><code >2</code ></a >: <code >u16</code ></li >
201
+ <li ><a name =" ipv6_address.3 " ><code >3</code ></a >: <code >u16</code ></li >
202
+ <li ><a name =" ipv6_address.4 " ><code >4</code ></a >: <code >u16</code ></li >
203
+ <li ><a name =" ipv6_address.5 " ><code >5</code ></a >: <code >u16</code ></li >
204
+ <li ><a name =" ipv6_address.6 " ><code >6</code ></a >: <code >u16</code ></li >
205
+ <li ><a name =" ipv6_address.7 " ><code >7</code ></a >: <code >u16</code ></li >
206
+ </ul >
207
+ <h4 ><a name =" ip_address " ><code >variant ip-address</code ></a ></h4 >
208
+ <h5 >Variant Cases</h5 >
209
+ <ul >
210
+ <li ><a name =" ip_address.ipv4 " ><code >ipv4</code ></a >: <a href =" #ipv4_address " ><a href =" #ipv4_address " ><code >ipv4-address</code ></a ></a ></li >
211
+ <li ><a name =" ip_address.ipv6 " ><code >ipv6</code ></a >: <a href =" #ipv6_address " ><a href =" #ipv6_address " ><code >ipv6-address</code ></a ></a ></li >
212
+ </ul >
213
+ <h4 ><a name =" ipv4_socket_address " ><code >record ipv4-socket-address</code ></a ></h4 >
214
+ <h5 >Record Fields</h5 >
215
+ <ul >
216
+ <li ><a name =" ipv4_socket_address.port " ><code >port</code ></a >: <code >u16</code ></li >
217
+ <li ><a name =" ipv4_socket_address.address " ><code >address</code ></a >: <a href =" #ipv4_address " ><a href =" #ipv4_address " ><code >ipv4-address</code ></a ></a ></li >
218
+ </ul >
219
+ <h4 ><a name =" ipv6_socket_address " ><code >record ipv6-socket-address</code ></a ></h4 >
220
+ <h5 >Record Fields</h5 >
221
+ <ul >
222
+ <li ><a name =" ipv6_socket_address.port " ><code >port</code ></a >: <code >u16</code ></li >
223
+ <li ><a name =" ipv6_socket_address.flow_info " ><code >flow-info</code ></a >: <code >u32</code ></li >
224
+ <li ><a name =" ipv6_socket_address.address " ><code >address</code ></a >: <a href =" #ipv6_address " ><a href =" #ipv6_address " ><code >ipv6-address</code ></a ></a ></li >
225
+ <li ><a name =" ipv6_socket_address.scope_id " ><code >scope-id</code ></a >: <code >u32</code ></li >
226
+ </ul >
227
+ <h4 ><a name =" ip_socket_address " ><code >variant ip-socket-address</code ></a ></h4 >
228
+ <h5 >Variant Cases</h5 >
229
+ <ul >
230
+ <li ><a name =" ip_socket_address.ipv4 " ><code >ipv4</code ></a >: <a href =" #ipv4_socket_address " ><a href =" #ipv4_socket_address " ><code >ipv4-socket-address</code ></a ></a ></li >
231
+ <li ><a name =" ip_socket_address.ipv6 " ><code >ipv6</code ></a >: <a href =" #ipv6_socket_address " ><a href =" #ipv6_socket_address " ><code >ipv6-socket-address</code ></a ></a ></li >
232
+ </ul >
233
233
<hr />
234
234
<h3 >Functions</h3 >
235
235
<h4 ><a name =" drop_network " ><code >drop-network: func</code ></a ></h4 >
@@ -326,7 +326,7 @@ mean "ready".</p>
326
326
<h5 >Record Fields</h5 >
327
327
<ul >
328
328
<li ><a name =" datagram.data " ><code >data</code ></a >: list< ; <code >u8</code >> ; </li >
329
- <li ><a name =" datagram.remote_address " ><a href =" #remote_address " ><code >remote-address</code ></a ></a >: <a href =" #ip_socket_address " ><a href =" #ip_socket_address " ><code >ip-socket-address</code ></a ></a ></li >
329
+ <li ><a name =" datagram.remote_address " ><a href =" #remote_address " ><code >remote-address</code ></a ></a >: option & lt ; <a href =" #ip_socket_address " ><a href =" #ip_socket_address " ><code >ip-socket-address</code ></a ></a >& gt ; </li >
330
330
</ul >
331
331
<hr />
332
332
<h3 >Functions</h3 >
@@ -466,14 +466,13 @@ returns how many messages were actually sent (or queued for sending).</p>
466
466
sending each individual datagram until either the end of the list has been reached or the first error occurred.
467
467
If at least one datagram has been sent successfully, this function never returns an error.</p >
468
468
<p >If the input list is empty, the function returns <code >ok(0)</code >.</p >
469
- <p >The remote address option is required. To send a message to the " ; connected" ; peer,
470
- call <a href =" #remote_address " ><code >remote-address</code ></a > to get their address.</p >
471
469
<h1 >Typical errors</h1 >
472
470
<ul >
473
471
<li ><code >address-family-mismatch</code >: The <a href =" #remote_address " ><code >remote-address</code ></a > has the wrong address family. (EAFNOSUPPORT)</li >
474
472
<li ><code >invalid-remote-address</code >: The IP address in <a href =" #remote_address " ><code >remote-address</code ></a > is set to INADDR_ANY (<code >0.0.0.0</code > / <code >::</code >). (EDESTADDRREQ, EADDRNOTAVAIL)</li >
475
473
<li ><code >invalid-remote-address</code >: The port in <a href =" #remote_address " ><code >remote-address</code ></a > is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL)</li >
476
- <li ><code >already-connected</code >: The socket is in " ; connected" ; mode and the <code >datagram.remote-address</code > does not match the address passed to <code >connect</code >. (EISCONN)</li >
474
+ <li ><code >already-connected</code >: The socket is in " ; connected" ; mode and <a href =" #remote_address " ><code >remote-address</code ></a > is <code >some</code > value that does not match the address passed to <code >connect</code >. (EISCONN)</li >
475
+ <li ><code >not-connected</code >: The socket is not " ; connected" ; and no value for <a href =" #remote_address " ><code >remote-address</code ></a > was provided. (EDESTADDRREQ)</li >
477
476
<li ><code >not-bound</code >: The socket is not bound to any local address. Unlike POSIX, this function does not perform an implicit bind.</li >
478
477
<li ><code >remote-unreachable</code >: The remote address is not reachable. (ECONNREFUSED, ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN)</li >
479
478
<li ><code >datagram-too-large</code >: The datagram is too large. (EMSGSIZE)</li >
@@ -731,21 +730,6 @@ when it does, they are expected to subsume this API.</p>
731
730
<p >An error type returned from a stream operation. Currently this
732
731
doesn't provide any additional information.</p >
733
732
<h5 >Record Fields</h5 >
734
- <h4 ><a name =" output_stream " ><code >type output-stream</code ></a ></h4 >
735
- <p ><code >u32</code ></p >
736
- <p >An output bytestream. In the future, this will be replaced by handle
737
- types.
738
- <p >This conceptually represents a <code >stream< ; u8, _> ; </code >. It's temporary
739
- scaffolding until component-model's async features are ready.</p >
740
- <p ><a href =" #output_stream " ><code >output-stream</code ></a >s are <em >non-blocking</em > to the extent practical on
741
- underlying platforms. Except where specified otherwise, I/O operations also
742
- always return promptly, after the number of bytes that can be written
743
- promptly, which could even be zero. To wait for the stream to be ready to
744
- accept data, the <a href =" #subscribe_to_output_stream " ><code >subscribe-to-output-stream</code ></a > function to obtain a
745
- <a href =" #pollable " ><code >pollable</code ></a > which can be polled for using <code >wasi_poll</code >.</p >
746
- <p >And at present, it is a <code >u32</code > instead of being an actual handle, until
747
- the wit-bindgen implementation of handles and resources is ready.</p >
748
- <p >This <a href =" https://github.com/WebAssembly/WASI/blob/main/docs/WitInWasi.md#Resources " >represents a resource</a >.</p >
749
733
<h4 ><a name =" input_stream " ><code >type input-stream</code ></a ></h4 >
750
734
<p ><code >u32</code ></p >
751
735
<p >An input bytestream. In the future, this will be replaced by handle
@@ -761,6 +745,21 @@ can be polled for using <code>wasi_poll</code>.</p>
761
745
<p >And at present, it is a <code >u32</code > instead of being an actual handle, until
762
746
the wit-bindgen implementation of handles and resources is ready.</p >
763
747
<p >This <a href =" https://github.com/WebAssembly/WASI/blob/main/docs/WitInWasi.md#Resources " >represents a resource</a >.</p >
748
+ <h4 ><a name =" output_stream " ><code >type output-stream</code ></a ></h4 >
749
+ <p ><code >u32</code ></p >
750
+ <p >An output bytestream. In the future, this will be replaced by handle
751
+ types.
752
+ <p >This conceptually represents a <code >stream< ; u8, _> ; </code >. It's temporary
753
+ scaffolding until component-model's async features are ready.</p >
754
+ <p ><a href =" #output_stream " ><code >output-stream</code ></a >s are <em >non-blocking</em > to the extent practical on
755
+ underlying platforms. Except where specified otherwise, I/O operations also
756
+ always return promptly, after the number of bytes that can be written
757
+ promptly, which could even be zero. To wait for the stream to be ready to
758
+ accept data, the <a href =" #subscribe_to_output_stream " ><code >subscribe-to-output-stream</code ></a > function to obtain a
759
+ <a href =" #pollable " ><code >pollable</code ></a > which can be polled for using <code >wasi_poll</code >.</p >
760
+ <p >And at present, it is a <code >u32</code > instead of being an actual handle, until
761
+ the wit-bindgen implementation of handles and resources is ready.</p >
762
+ <p >This <a href =" https://github.com/WebAssembly/WASI/blob/main/docs/WitInWasi.md#Resources " >represents a resource</a >.</p >
764
763
<hr />
765
764
<h3 >Functions</h3 >
766
765
<h4 ><a name =" read " ><code >read: func</code ></a ></h4 >
0 commit comments