wasmtime_wasi/p2/host/
udp_create_socket.rs1use crate::p2::bindings::{sockets::network::IpAddressFamily, sockets::udp_create_socket};
2use crate::p2::{SocketResult, UdpSocket};
3use crate::sockets::UdpSocket as P3Socket;
4use crate::sockets::WasiSocketsCtxView;
5use wasmtime::component::Resource;
6
7impl udp_create_socket::Host for WasiSocketsCtxView<'_> {
8 async fn create_udp_socket(
9 &mut self,
10 address_family: IpAddressFamily,
11 ) -> SocketResult<Resource<UdpSocket>> {
12 let inner = P3Socket::new(self.ctx, address_family.into()).await?;
13 let socket = self.table.push(UdpSocket::new(inner))?;
14 Ok(socket)
15 }
16}
17
18pub mod sync {
19 use wasmtime::component::Resource;
20
21 use crate::p2::{
22 SocketResult, UdpSocket,
23 bindings::sockets::udp_create_socket::Host as AsyncHost,
24 bindings::sync::sockets::{udp::IpAddressFamily, udp_create_socket},
25 };
26 use crate::runtime::in_tokio;
27 use crate::sockets::WasiSocketsCtxView;
28
29 impl udp_create_socket::Host for WasiSocketsCtxView<'_> {
30 fn create_udp_socket(
31 &mut self,
32 address_family: IpAddressFamily,
33 ) -> SocketResult<Resource<UdpSocket>> {
34 in_tokio(async { AsyncHost::create_udp_socket(self, address_family).await })
35 }
36 }
37}
38
39mod named {
40 use crate::p2::SocketError;
41 use crate::p2::bindings::named_imports::wasi::sockets::udp_create_socket;
42 use crate::p2::bindings::sockets::network::ErrorCode;
43 use crate::p2::bindings::sockets::network::IpAddressFamily;
44 use crate::p2::{SocketResult, UdpSocket};
45 use crate::sockets::WasiSocketsNamedView;
46 use crate::{NamedId, WasiCtxNamedView};
47 use wasmtime::component::Resource;
48
49 impl<T> udp_create_socket::Host for WasiCtxNamedView<'_, T>
50 where
51 T: WasiSocketsNamedView,
52 {
53 fn convert_error_code(&mut self, err: SocketError) -> wasmtime::Result<ErrorCode> {
54 err.downcast()
55 }
56
57 async fn create_udp_socket(
58 &mut self,
59 id: NamedId,
60 address_family: IpAddressFamily,
61 ) -> SocketResult<Resource<UdpSocket>> {
62 super::udp_create_socket::Host::create_udp_socket(
63 &mut self.0.sockets(id),
64 address_family,
65 )
66 .await
67 }
68 }
69}