type stream = Cstruct.t
type position = int32

A stream remains at a fixed position so that repeated calls to read or write process the same data. To advance the stream call advance new_position

val advance : stream -> position -> unit

advanced stream position declares that we have processed all data up to position and therefore any buffers may be recycled.