[gambit-list] Does gambit support flow control on ports?
Jörg F. Wittenberger
Joerg.Wittenberger at softeyes.net
Mon Nov 9 03:40:29 EST 2020
Am Sun, 8 Nov 2020 21:10:31 -0500
schrieb John Cowan <cowan at ccil.org>:
> On Sun, Nov 8, 2020 at 6:55 AM Jörg F. Wittenberger <
> Joerg.Wittenberger at softeyes.net> wrote:
>
>
> > (define (make-pipe)
> > (open-u8vector-pipe '(buffering: #f) '(buffering: #f)))
> >
>
> This means that there is no buffering inside Gambit, which is almost
> always what you want.
That's been the intention.
> (receive (in out) (make-pipe)
> > (display "foo" out) ;; I'd expect this to block,
> > (force-output out) ;; but even this does not.
> > "too bad")
> >
>
> The force-output has no effect because it flushes the Gambit buffers,
> but you have already disabled them.
That's been my - obviously wrong - assumption.
> However, Posix pipes also have buffers inside, and you can write up to
> PIPE_BUF bytes atomically before you can be blocked. The value of
> PIPE_BUF depends on your OS, but on Linux it is 64K by default. This
> is actually harmless, though. Unlike a stdio buffer, as soon as
> there are any bytes in the pipe the receiving end can pull them out,
> so there is no need to ever flush the pipe itself.
Sure, I could get some flow control from putting a OS pipe in between.
But that unreasonably complicates the (supposed to be portable) code.
My guess was that I might have overlooked something in the manual. Or
the hope some would know how to mess with the internals to add it.
More information about the Gambit-list
mailing list