Skip to main content

wasmtime_wasi/p2/host/
udp_create_socket.rs

1use 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}