Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/test-programs/src/tls.rs
1693 views
1
use crate::wasi::clocks::monotonic_clock;
2
use crate::wasi::io::error::Error as IoError;
3
use crate::wasi::io::streams::StreamError;
4
use crate::wasi::tls::types::{ClientConnection, ClientHandshake, InputStream, OutputStream};
5
6
const TIMEOUT_NS: u64 = 1_000_000_000;
7
8
impl ClientHandshake {
9
pub fn blocking_finish(self) -> Result<(ClientConnection, InputStream, OutputStream), IoError> {
10
let future = ClientHandshake::finish(self);
11
let timeout = monotonic_clock::subscribe_duration(TIMEOUT_NS * 200);
12
let pollable = future.subscribe();
13
14
loop {
15
match future.get() {
16
None => pollable.block_until(&timeout).expect("timed out"),
17
Some(Ok(r)) => return r,
18
Some(Err(e)) => {
19
eprintln!("{e:?}");
20
unimplemented!()
21
}
22
}
23
}
24
}
25
}
26
27
impl ClientConnection {
28
pub fn blocking_close_output(
29
&self,
30
output: &OutputStream,
31
) -> Result<(), crate::wasi::io::error::Error> {
32
let timeout = monotonic_clock::subscribe_duration(TIMEOUT_NS);
33
let pollable = output.subscribe();
34
35
self.close_output();
36
37
loop {
38
match output.check_write() {
39
Ok(0) => pollable.block_until(&timeout).expect("timed out"),
40
Ok(_) => unreachable!(
41
"After calling close_output, the output stream should never accept new writes again."
42
),
43
Err(StreamError::Closed) => return Ok(()),
44
Err(StreamError::LastOperationFailed(e)) => return Err(e),
45
}
46
}
47
}
48
}
49
50