On 6/16/2021 1:19 PM, David Storrs wrote:
I'm getting bytes off the wire and attempting to write them to a
port. I have a check in place to verify that the pipe has free space
but when I attempt to reports that yes, there is space, and then it
writes and fails regardless and I'm not sure why. The following is a
simplified version of the code but it produces the same results as the
live version.
I've dug through the docs on write-bytes-avail* and pipes and I'm
scratching my head. Any thoughts?
------- code
#lang racket
(define bstr (make-shared-bytes 509 5))
(define rx-pipe-size 16777216)
(define-values (rx-in rx-out) (make-pipe rx-pipe-size))
(define (room-in-rx-pipe? bstr)
(define avail (- rx-pipe-size (pipe-content-length rx-out)))
(displayln (format "space available: ~a" avail))
(<= (bytes-length bstr) avail))
(displayln (format "space available? ~a " (room-in-rx-pipe? bstr)))
(define num-bytes-written (write-bytes-avail* bstr rx-out))
(unless (eq? num-bytes-written (bytes-length bstr))
(displayln (format "rx buffer overflow. num-bytes-written ~a,
expected ~a"
num-bytes-written (bytes-length bstr))))
(displayln "done")
-------- /code
The output is:
------- output
avail: 16777216
space available? #t
pipe content length: 0
rx buffer overflow. pipe content length: 15, written 15, expected 509
done
------- /output
I'm not sure what's going on either, but your output says the pipe
contains 15 characters/bytes and THAT will cause *write-bytes-avail** to
fail ... it fails if there is existing buffered content. I suspect that
it will work if you substitute *write-bytes-avail* (no *) or have
something read from the pipe before writing to it.
I've never used Racket's pipes, but this looks very much like a connect
handshake issue.
George
--
You received this message because you are subscribed to the Google Groups "Racket
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/0619cc74-a15d-a0f2-38b7-09feeebf59c0%40comcast.net.