# Class type Uq_engines.async_in_channel

    class type async_in_channel = object .. end

An asynchrounous input channel provides methods to input data from a stream descriptor. It is based on `raw_in_channel`, which is defined by the Ocamlnet module `Netchannels` (see there for an introduction into the idea of using objects as I/O channels). An asynchronous channel can indicate that there is no data in the input buffer. Furthermore, one can request notification in the case that there is no data or again data in the input buffer.

# Methods from `raw_in_channel`

    method input : string -> int -> int -> int

`input s k n`: Reads channel data into the substring of `s` beginning at index `k` with length `n`. The channel is free to fill only a portion of the string (or even nothing). The method returns the number of bytes actually read.

The exception `End_of_file` indicates that the end of the channel is reached. The return value `0`, however, means that no data could be read.

    method close_in : unit -> unit

Closes the channel

    method pos_in : int

Returns the number of characters read from the channel

# Additional control methods

    method can_input : bool

Whether input is possible, i.e. the input method gets at least one byte, or can signal `End_of_file`.

    method request_notification : (unit -> bool) -> unit

After the notification has been requested, the passed function is be called whenever `can_input` changes its value (or might change its value). The function returns `true` if there is still interest in notification, and `false` if notification must be disabled.

There can be any number of parallel active notifications. It is allowed that a notification callback requests further notifications.