diff --git a/src/net/tcp/listener.rs b/src/net/tcp/listener.rs index 72c5d3a..09f5812 100644 --- a/src/net/tcp/listener.rs +++ b/src/net/tcp/listener.rs @@ -75,6 +75,8 @@ impl TcpListener { /// /// [`local_addr`]: #method.local_addr pub async fn bind(addrs: A) -> io::Result { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let mut last_err = None; let addrs = addrs.to_socket_addrs().await?; @@ -200,6 +202,8 @@ impl<'a> Stream for Incoming<'a> { impl From for TcpListener { /// Converts a `std::net::TcpListener` into its asynchronous equivalent. fn from(listener: std::net::TcpListener) -> TcpListener { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + TcpListener { watcher: Async::new(listener).expect("TcpListener is known to be good"), } diff --git a/src/net/tcp/stream.rs b/src/net/tcp/stream.rs index b854143..63232fa 100644 --- a/src/net/tcp/stream.rs +++ b/src/net/tcp/stream.rs @@ -71,6 +71,8 @@ impl TcpStream { /// # Ok(()) }) } /// ``` pub async fn connect(addrs: A) -> io::Result { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let mut last_err = None; let addrs = addrs.to_socket_addrs().await?; @@ -356,6 +358,8 @@ impl Write for &TcpStream { impl From for TcpStream { /// Converts a `std::net::TcpStream` into its asynchronous equivalent. fn from(stream: std::net::TcpStream) -> TcpStream { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + TcpStream { watcher: Arc::new(Async::new(stream).expect("TcpStream is known to be good")), } diff --git a/src/net/udp/mod.rs b/src/net/udp/mod.rs index 18f6fc7..d361a6f 100644 --- a/src/net/udp/mod.rs +++ b/src/net/udp/mod.rs @@ -68,6 +68,8 @@ impl UdpSocket { /// # Ok(()) }) } /// ``` pub async fn bind(addrs: A) -> io::Result { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let mut last_err = None; let addrs = addrs.to_socket_addrs().await?; @@ -479,6 +481,8 @@ impl UdpSocket { impl From for UdpSocket { /// Converts a `std::net::UdpSocket` into its asynchronous equivalent. fn from(socket: std::net::UdpSocket) -> UdpSocket { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + UdpSocket { watcher: Async::new(socket).expect("UdpSocket is known to be good"), } diff --git a/src/os/unix/net/datagram.rs b/src/os/unix/net/datagram.rs index 6a30b02..52c6b07 100644 --- a/src/os/unix/net/datagram.rs +++ b/src/os/unix/net/datagram.rs @@ -45,6 +45,8 @@ pub struct UnixDatagram { impl UnixDatagram { fn new(socket: StdUnixDatagram) -> UnixDatagram { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + UnixDatagram { watcher: Async::new(socket).expect("UnixDatagram is known to be good"), } @@ -64,6 +66,8 @@ impl UnixDatagram { /// # Ok(()) }) } /// ``` pub async fn bind>(path: P) -> io::Result { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let path = path.as_ref().to_owned(); let socket = Async::::bind(path)?; Ok(UnixDatagram { watcher: socket }) @@ -305,6 +309,8 @@ impl fmt::Debug for UnixDatagram { impl From for UnixDatagram { /// Converts a `std::os::unix::net::UnixDatagram` into its asynchronous equivalent. fn from(datagram: StdUnixDatagram) -> UnixDatagram { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + UnixDatagram { watcher: Async::new(datagram).expect("UnixDatagram is known to be good"), } @@ -319,6 +325,8 @@ impl AsRawFd for UnixDatagram { impl FromRawFd for UnixDatagram { unsafe fn from_raw_fd(fd: RawFd) -> UnixDatagram { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let raw = StdUnixDatagram::from_raw_fd(fd); let datagram = Async::::new(raw).expect("invalid file descriptor"); UnixDatagram { watcher: datagram } diff --git a/src/os/unix/net/listener.rs b/src/os/unix/net/listener.rs index ac03307..a63bd4b 100644 --- a/src/os/unix/net/listener.rs +++ b/src/os/unix/net/listener.rs @@ -68,6 +68,8 @@ impl UnixListener { /// # Ok(()) }) } /// ``` pub async fn bind>(path: P) -> io::Result { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let path = path.as_ref().to_owned(); let listener = Async::::bind(path)?; @@ -93,7 +95,12 @@ impl UnixListener { pub async fn accept(&self) -> io::Result<(UnixStream, SocketAddr)> { let (stream, addr) = self.watcher.accept().await?; - Ok((UnixStream { watcher: Arc::new(stream) }, addr)) + Ok(( + UnixStream { + watcher: Arc::new(stream), + }, + addr, + )) } /// Returns a stream of incoming connections. @@ -187,6 +194,8 @@ impl Stream for Incoming<'_> { impl From for UnixListener { /// Converts a `std::os::unix::net::UnixListener` into its asynchronous equivalent. fn from(listener: StdUnixListener) -> UnixListener { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + UnixListener { watcher: Async::new(listener).expect("UnixListener is known to be good"), } diff --git a/src/os/unix/net/stream.rs b/src/os/unix/net/stream.rs index b1ba5bc..74bd6ae 100644 --- a/src/os/unix/net/stream.rs +++ b/src/os/unix/net/stream.rs @@ -57,6 +57,8 @@ impl UnixStream { /// # Ok(()) }) } /// ``` pub async fn connect>(path: P) -> io::Result { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let path = path.as_ref().to_owned(); let stream = Arc::new(Async::::connect(path).await?); @@ -79,6 +81,8 @@ impl UnixStream { /// # Ok(()) }) } /// ``` pub fn pair() -> io::Result<(UnixStream, UnixStream)> { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let (a, b) = Async::::pair()?; let a = UnixStream { watcher: Arc::new(a), @@ -224,8 +228,12 @@ impl fmt::Debug for UnixStream { impl From for UnixStream { /// Converts a `std::os::unix::net::UnixStream` into its asynchronous equivalent. fn from(stream: StdUnixStream) -> UnixStream { + once_cell::sync::Lazy::force(&crate::rt::RUNTIME); + let stream = Async::new(stream).expect("UnixStream is known to be good"); - UnixStream { watcher: Arc::new(stream) } + UnixStream { + watcher: Arc::new(stream), + } } }