Types
resource networksince 0.2.0
An opaque resource that represents access to (a subset of) the network. This enables context-based security for networking. There is no need for this to map 1:1 to a physical network interface.
enum error-codesince 0.2.0
Error codes.
In theory, every API can return any error code. In practice, API's typically only return the errors documented per API combined with a couple of errors that are always possible:
unknownaccess-deniednot-supportedout-of-memoryconcurrency-conflict
See each individual API for what the POSIX equivalents are. They sometimes differ per API.
unknownUnknown error
access-deniedAccess denied.
POSIX equivalent: EACCES, EPERM
not-supportedThe operation is not supported.
POSIX equivalent: EOPNOTSUPP
invalid-argumentOne of the arguments is invalid.
POSIX equivalent: EINVAL
out-of-memoryNot enough memory to complete the operation.
POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY
timeoutThe operation timed out before it could finish completely.
concurrency-conflictThis operation is incompatible with another asynchronous operation that is already in progress.
POSIX equivalent: EALREADY
not-in-progressTrying to finish an asynchronous operation that:
- has not been started yet, or:
- was already finished by a previous
finish-*call.
Note: this is scheduled to be removed when
futures are natively supported.would-blockThe operation has been aborted because it could not be completed immediately.
Note: this is scheduled to be removed when
futures are natively supported.invalid-stateThe operation is not valid in the socket's current state.
new-socket-limitA new socket resource could not be created because of a system limit.
address-not-bindableA bind operation failed because the provided address is not an address that the
networkcan bind to.address-in-useA bind operation failed because the provided address is already in use or because there are no ephemeral ports available.
remote-unreachableThe remote address is not reachable
connection-refusedThe TCP connection was forcefully rejected
connection-resetThe TCP connection was reset.
connection-abortedA TCP connection was aborted.
datagram-too-largeThe size of a datagram sent to a UDP socket exceeded the maximum supported size.
name-unresolvableName does not exist or has no suitable associated IP addresses.
temporary-resolver-failureA temporary failure in name resolution occurred.
permanent-resolver-failureA permanent failure in name resolution occurred.
enum ip-address-familysince 0.2.0
ipv4Similar to
AF_INETin POSIX.ipv6Similar to
AF_INET6in POSIX.
type ipv4-addresssince 0.2.0
tuple<u8, u8, u8, u8>
type ipv6-addresssince 0.2.0
tuple<u16, u16, u16, u16, u16, u16, u16, u16>
variant ip-addresssince 0.2.0
ipv4:ipv4-addressipv6:ipv6-address
record ipv4-socket-addresssince 0.2.0
port:u16sin_port
address:ipv4-addresssin_addr
record ipv6-socket-addresssince 0.2.0
port:u16sin6_port
flow-info:u32sin6_flowinfo
address:ipv6-addresssin6_addr
scope-id:u32sin6_scope_id
variant ip-socket-addresssince 0.2.0
ipv4:ipv4-socket-addressipv6:ipv6-socket-address
WIT
@since(version = 0.2.0)
interface network {
/// An opaque resource that represents access to (a subset of) the network.
/// This enables context-based security for networking.
/// There is no need for this to map 1:1 to a physical network interface.
@since(version = 0.2.0)
resource network;
/// Error codes.
///
/// In theory, every API can return any error code.
/// In practice, API's typically only return the errors documented per API
/// combined with a couple of errors that are always possible:
/// - `unknown`
/// - `access-denied`
/// - `not-supported`
/// - `out-of-memory`
/// - `concurrency-conflict`
///
/// See each individual API for what the POSIX equivalents are. They sometimes differ per API.
@since(version = 0.2.0)
enum error-code {
/// Unknown error
unknown,
/// Access denied.
///
/// POSIX equivalent: EACCES, EPERM
access-denied,
/// The operation is not supported.
///
/// POSIX equivalent: EOPNOTSUPP
not-supported,
/// One of the arguments is invalid.
///
/// POSIX equivalent: EINVAL
invalid-argument,
/// Not enough memory to complete the operation.
///
/// POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY
out-of-memory,
/// The operation timed out before it could finish completely.
timeout,
/// This operation is incompatible with another asynchronous operation that is already in progress.
///
/// POSIX equivalent: EALREADY
concurrency-conflict,
/// Trying to finish an asynchronous operation that:
/// - has not been started yet, or:
/// - was already finished by a previous `finish-*` call.
///
/// Note: this is scheduled to be removed when `future`s are natively supported.
not-in-progress,
/// The operation has been aborted because it could not be completed immediately.
///
/// Note: this is scheduled to be removed when `future`s are natively supported.
would-block,
/// The operation is not valid in the socket's current state.
invalid-state,
/// A new socket resource could not be created because of a system limit.
new-socket-limit,
/// A bind operation failed because the provided address is not an address that the `network` can bind to.
address-not-bindable,
/// A bind operation failed because the provided address is already in use or because there are no ephemeral ports available.
address-in-use,
/// The remote address is not reachable
remote-unreachable,
/// The TCP connection was forcefully rejected
connection-refused,
/// The TCP connection was reset.
connection-reset,
/// A TCP connection was aborted.
connection-aborted,
/// The size of a datagram sent to a UDP socket exceeded the maximum
/// supported size.
datagram-too-large,
/// Name does not exist or has no suitable associated IP addresses.
name-unresolvable,
/// A temporary failure in name resolution occurred.
temporary-resolver-failure,
/// A permanent failure in name resolution occurred.
permanent-resolver-failure,
}
@since(version = 0.2.0)
enum ip-address-family {
/// Similar to `AF_INET` in POSIX.
ipv4,
/// Similar to `AF_INET6` in POSIX.
ipv6,
}
@since(version = 0.2.0)
type ipv4-address = tuple<u8, u8, u8, u8>;
@since(version = 0.2.0)
type ipv6-address = tuple<u16, u16, u16, u16, u16, u16, u16, u16>;
@since(version = 0.2.0)
variant ip-address {
ipv4(ipv4-address),
ipv6(ipv6-address),
}
@since(version = 0.2.0)
record ipv4-socket-address {
/// sin_port
port: u16,
/// sin_addr
address: ipv4-address,
}
@since(version = 0.2.0)
record ipv6-socket-address {
/// sin6_port
port: u16,
/// sin6_flowinfo
flow-info: u32,
/// sin6_addr
address: ipv6-address,
/// sin6_scope_id
scope-id: u32,
}
@since(version = 0.2.0)
variant ip-socket-address {
ipv4(ipv4-socket-address),
ipv6(ipv6-socket-address),
}
}