componentized/directory

wasi:io

interface dependency

A WASI API providing I/O stream abstractions.

interface poll wasi:io/poll@0.2.3 since 0.2.0

A poll API intended to let users wait for I/O events on multiple handles at once.

Types

resource pollablesince 0.2.0

pollable represents a single I/O event which may be ready, or not.

  • functionready: func() -> boolsince 0.2.0

    Return the readiness of a pollable. This function never blocks.

    Returns true when the pollable is ready, and false otherwise.

  • functionblock: func()since 0.2.0

    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.

Functions

functionpoll: func(in: list<borrow<pollable>>) -> list<u32>since 0.2.0

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.

WIT

/// 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>;
}