A Racket pipe is internal to Racket, and not related to OS-level pipes (which are file-stream ports) for communicating between different processes.
(make-pipe [limit input-name output-name])
input-port? output-port? limit : exact-positive-integer? = #f input-name : any/c = 'pipe output-name : any/c = 'pipe
If limit is #f, the new pipe holds an unlimited number of unread bytes (i.e., limited only by the available memory). If limit is a positive number, then the pipe will hold at most limit unread/unpeeked bytes; writing to the pipe’s output port thereafter will block until a read or peek from the input port makes more space available. (Peeks effectively extend the port’s capacity until the peeked bytes are read.)
The optional input-name and output-name are used as the names for the returned input and output ports, respectively.