47 lines
1.8 KiB
Text
47 lines
1.8 KiB
Text
package wasi:io@0.2.4;
|
|
|
|
/// A poll API intended to let users wait for I/O events on multiple handles
|
|
/// at once.
|
|
@since(version = 0.2.0)
|
|
interface poll {
|
|
/// `pollable` represents a single I/O event which may be ready, or not.
|
|
@since(version = 0.2.0)
|
|
resource pollable {
|
|
|
|
/// Return the readiness of a pollable. This function never blocks.
|
|
///
|
|
/// Returns `true` when the pollable is ready, and `false` otherwise.
|
|
@since(version = 0.2.0)
|
|
ready: func() -> bool;
|
|
|
|
/// `block` returns immediately if the pollable is ready, and otherwise
|
|
/// blocks until ready.
|
|
///
|
|
/// This function is equivalent to calling `poll.poll` on a list
|
|
/// containing only this pollable.
|
|
@since(version = 0.2.0)
|
|
block: func();
|
|
}
|
|
|
|
/// Poll for completion on a set of pollables.
|
|
///
|
|
/// This function takes a list of pollables, which identify I/O sources of
|
|
/// interest, and waits until one or more of the events is ready for I/O.
|
|
///
|
|
/// The result `list<u32>` contains one or more indices of handles in the
|
|
/// argument list that is ready for I/O.
|
|
///
|
|
/// This function traps if either:
|
|
/// - the list is empty, or:
|
|
/// - the list contains more elements than can be indexed with a `u32` value.
|
|
///
|
|
/// A timeout can be implemented by adding a pollable from the
|
|
/// wasi-clocks API to the list.
|
|
///
|
|
/// This function does not return a `result`; polling in itself does not
|
|
/// do any I/O so it doesn't fail. If any of the I/O sources identified by
|
|
/// the pollables has an error, it is indicated by marking the source as
|
|
/// being ready for I/O.
|
|
@since(version = 0.2.0)
|
|
poll: func(in: list<borrow<pollable>>) -> list<u32>;
|
|
}
|