Path: blob/main/crates/test-programs/src/tls.rs
1693 views
use crate::wasi::clocks::monotonic_clock;1use crate::wasi::io::error::Error as IoError;2use crate::wasi::io::streams::StreamError;3use crate::wasi::tls::types::{ClientConnection, ClientHandshake, InputStream, OutputStream};45const TIMEOUT_NS: u64 = 1_000_000_000;67impl ClientHandshake {8pub fn blocking_finish(self) -> Result<(ClientConnection, InputStream, OutputStream), IoError> {9let future = ClientHandshake::finish(self);10let timeout = monotonic_clock::subscribe_duration(TIMEOUT_NS * 200);11let pollable = future.subscribe();1213loop {14match future.get() {15None => pollable.block_until(&timeout).expect("timed out"),16Some(Ok(r)) => return r,17Some(Err(e)) => {18eprintln!("{e:?}");19unimplemented!()20}21}22}23}24}2526impl ClientConnection {27pub fn blocking_close_output(28&self,29output: &OutputStream,30) -> Result<(), crate::wasi::io::error::Error> {31let timeout = monotonic_clock::subscribe_duration(TIMEOUT_NS);32let pollable = output.subscribe();3334self.close_output();3536loop {37match output.check_write() {38Ok(0) => pollable.block_until(&timeout).expect("timed out"),39Ok(_) => unreachable!(40"After calling close_output, the output stream should never accept new writes again."41),42Err(StreamError::Closed) => return Ok(()),43Err(StreamError::LastOperationFailed(e)) => return Err(e),44}45}46}47}484950