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.

Reply via email to