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}