pub trait Host {
Show 26 methods
// Required methods
fn start_bind<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
network: Network,
local_address: IpSocketAddress
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn finish_bind<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn start_connect<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
network: Network,
remote_address: IpSocketAddress
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn finish_connect<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<(InputStream, OutputStream), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn start_listen<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
network: Network
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn finish_listen<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn accept<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<(TcpSocket, InputStream, OutputStream), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn local_address<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<IpSocketAddress, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn remote_address<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<IpSocketAddress, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn address_family<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<IpAddressFamily>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn ipv6_only<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_ipv6_only<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: bool
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_listen_backlog_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: u64
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn keep_alive<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_keep_alive<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: bool
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn no_delay<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_no_delay<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: bool
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn unicast_hop_limit<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<u8, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_unicast_hop_limit<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: u8
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn receive_buffer_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<u64, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_receive_buffer_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: u64
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn send_buffer_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<u64, ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_send_buffer_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: u64
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn subscribe<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Pollable>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn shutdown<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
shutdown_type: ShutdownType
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn drop_tcp_socket<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}
Required Methods§
sourcefn start_bind<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
network: Network,
local_address: IpSocketAddress
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn start_bind<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, network: Network, local_address: IpSocketAddress ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Bind the socket to a specific network on the provided IP address and port.
If the IP address is zero (0.0.0.0
in IPv4, ::
in IPv6), it is left to the implementation to decide which
network interface(s) to bind to.
If the TCP/UDP port is zero, the socket will be bound to a random free port.
When a socket is not explicitly bound, the first invocation to a listen or connect operation will implicitly bind the socket.
Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts.
Typical start
errors
address-family-mismatch
: Thelocal-address
has the wrong address family. (EINVAL)already-bound
: The socket is already bound. (EINVAL)concurrency-conflict
: Anotherbind
,connect
orlisten
operation is already in progress. (EALREADY)
Typical finish
errors
ephemeral-ports-exhausted
: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows)address-in-use
: Address is already in use. (EADDRINUSE)address-not-bindable
:local-address
is not an address that thenetwork
can bind to. (EADDRNOTAVAIL)not-in-progress
: Abind
operation is not in progress.would-block
: Can’t finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN)
References
fn finish_bind<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn start_connect<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
network: Network,
remote_address: IpSocketAddress
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn start_connect<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, network: Network, remote_address: IpSocketAddress ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Connect to a remote endpoint.
On success:
- the socket is transitioned into the Connection state
- a pair of streams is returned that can be used to read & write to the connection
Typical start
errors
address-family-mismatch
: Theremote-address
has the wrong address family. (EAFNOSUPPORT)invalid-remote-address
: The IP address inremote-address
is set to INADDR_ANY (0.0.0.0
/::
). (EADDRNOTAVAIL on Windows)invalid-remote-address
: The port inremote-address
is set to 0. (EADDRNOTAVAIL on Windows)already-attached
: The socket is already attached to a different network. Thenetwork
passed toconnect
must be identical to the one passed tobind
.already-connected
: The socket is already in the Connection state. (EISCONN)already-listening
: The socket is already in the Listener state. (EOPNOTSUPP, EINVAL on Windows)concurrency-conflict
: Anotherbind
,connect
orlisten
operation is already in progress. (EALREADY)
Typical finish
errors
timeout
: Connection timed out. (ETIMEDOUT)connection-refused
: The connection was forcefully rejected. (ECONNREFUSED)connection-reset
: The connection was reset. (ECONNRESET)remote-unreachable
: The remote address is not reachable. (EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN)ephemeral-ports-exhausted
: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD)not-in-progress
: Aconnect
operation is not in progress.would-block
: Can’t finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN)
References
fn finish_connect<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<(InputStream, OutputStream), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn start_listen<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
network: Network
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn start_listen<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, network: Network ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Start listening for new connections.
Transitions the socket into the Listener state.
Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts.
Typical start
errors
already-attached
: The socket is already attached to a different network. Thenetwork
passed tolisten
must be identical to the one passed tobind
.already-connected
: The socket is already in the Connection state. (EISCONN, EINVAL on BSD)already-listening
: The socket is already in the Listener state.concurrency-conflict
: Anotherbind
,connect
orlisten
operation is already in progress. (EINVAL on BSD)
Typical finish
errors
ephemeral-ports-exhausted
: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE)not-in-progress
: Alisten
operation is not in progress.would-block
: Can’t finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN)
References
fn finish_listen<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn accept<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<(TcpSocket, InputStream, OutputStream), ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn accept<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<(TcpSocket, InputStream, OutputStream), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Accept a new client socket.
The returned socket is bound and in the Connection state.
On success, this function returns the newly accepted client socket along with a pair of streams that can be used to read & write to the connection.
Typical errors
not-listening
: Socket is not in the Listener state. (EINVAL)would-block
: No pending connections at the moment. (EWOULDBLOCK, EAGAIN)
Host implementations must skip over transient errors returned by the native accept syscall.
References
sourcefn local_address<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<IpSocketAddress, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn local_address<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<IpSocketAddress, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Get the bound local address.
Typical errors
not-bound
: The socket is not bound to any local address.
References
sourcefn remote_address<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<IpSocketAddress, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn remote_address<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<IpSocketAddress, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Get the bound remote address.
Typical errors
not-connected
: The socket is not connected to a remote address. (ENOTCONN)
References
sourcefn address_family<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<IpAddressFamily>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn address_family<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<IpAddressFamily>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Whether this is a IPv4 or IPv6 socket.
Equivalent to the SO_DOMAIN socket option.
sourcefn ipv6_only<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn ipv6_only<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Whether IPv4 compatibility (dual-stack) mode is disabled or not.
Equivalent to the IPV6_V6ONLY socket option.
Typical errors
ipv6-only-operation
: (get/set)this
socket is an IPv4 socket.already-bound
: (set) The socket is already bound.not-supported
: (set) Host does not support dual-stack sockets. (Implementations are not required to.)concurrency-conflict
: (set) Abind
,connect
orlisten
operation is already in progress. (EALREADY)
fn set_ipv6_only<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: bool ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn set_listen_backlog_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
value: u64
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_listen_backlog_size<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: u64 ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Hints the desired listen queue size. Implementations are free to ignore this.
Typical errors
already-connected
: (set) The socket is already in the Connection state.concurrency-conflict
: (set) Abind
,connect
orlisten
operation is already in progress. (EALREADY)
sourcefn keep_alive<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn keep_alive<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Equivalent to the SO_KEEPALIVE socket option.
Typical errors
concurrency-conflict
: (set) Abind
,connect
orlisten
operation is already in progress. (EALREADY)
fn set_keep_alive<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: bool ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn no_delay<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn no_delay<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<bool, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Equivalent to the TCP_NODELAY socket option.
Typical errors
concurrency-conflict
: (set) Abind
,connect
orlisten
operation is already in progress. (EALREADY)
fn set_no_delay<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: bool ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn unicast_hop_limit<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<u8, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn unicast_hop_limit<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<u8, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options.
Typical errors
already-connected
: (set) The socket is already in the Connection state.already-listening
: (set) The socket is already in the Listener state.concurrency-conflict
: (set) Abind
,connect
orlisten
operation is already in progress. (EALREADY)
fn set_unicast_hop_limit<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: u8 ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn receive_buffer_size<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Result<u64, ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn receive_buffer_size<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<u64, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
The kernel buffer space reserved for sends/receives on this socket.
Note #1: an implementation may choose to cap or round the buffer size when setting the value. In other words, after setting a value, reading the same setting back may return a different value.
Note #2: there is not necessarily a direct relationship between the kernel buffer size and the bytes of actual data to be sent/received by the application, because the kernel might also use the buffer space for internal metadata structures.
Equivalent to the SO_RCVBUF and SO_SNDBUF socket options.
Typical errors
already-connected
: (set) The socket is already in the Connection state.already-listening
: (set) The socket is already in the Listener state.concurrency-conflict
: (set) Abind
,connect
orlisten
operation is already in progress. (EALREADY)
fn set_receive_buffer_size<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: u64 ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
fn send_buffer_size<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Result<u64, ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
fn set_send_buffer_size<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, value: u64 ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
sourcefn subscribe<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<Pollable>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn subscribe<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<Pollable>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Create a pollable
which will resolve once the socket is ready for I/O.
Note: this function is here for WASI Preview2 only.
It’s planned to be removed when future
is natively supported in Preview3.
sourcefn shutdown<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket,
shutdown_type: ShutdownType
) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn shutdown<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket, shutdown_type: ShutdownType ) -> Pin<Box<dyn Future<Output = Result<Result<(), ErrorCode>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Initiate a graceful shutdown.
- receive: the socket is not expecting to receive any more data from the peer. All subsequent read
operations on the
input-stream
associated with this socket will return an End Of Stream indication. Any data still in the receive queue at time of callingshutdown
will be discarded. - send: the socket is not expecting to send any more data to the peer. All subsequent write
operations on the
output-stream
associated with this socket will return an error. - both: same effect as receive & send combined.
The shutdown function does not close (drop) the socket.
Typical errors
not-connected
: The socket is not in the Connection state. (ENOTCONN)
References
sourcefn drop_tcp_socket<'life0, 'async_trait>(
&'life0 mut self,
this: TcpSocket
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn drop_tcp_socket<'life0, 'async_trait>( &'life0 mut self, this: TcpSocket ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Dispose of the specified tcp-socket
, after which it may no longer be used.
Similar to the POSIX close
function.
Note: this function is scheduled to be removed when Resources are natively supported in Wit.