hashicorp / yamux

Golang connection multiplexing library
Mozilla Public License 2.0
2.25k stars 236 forks source link

Add support for closing write ends of streams #84

Open eandre opened 4 years ago

eandre commented 4 years ago

When sending payloads of unknown length over a Stream and expecting the server to read it to completion before emitting a response (such as forwarding a byte stream), one difficulty with yamux is communicating that the byte stream's end has been reached.

One approach is to introduce a higher-level protocol, but when the byte stream is of unknown size this requires essentially reimplementing large parts of yamux's framing protocol.

A simpler solution is to communicate that EOF has been reached. Yamux provides this capability through (*Stream).Close, but it closes both the read and the write ends, which then prevents the client from reading the response from the server.

This change introduces a new method, (*Stream).CloseWrite, which only closes the write end of the stream. When encountered on the other end, it sets a flag that the remote's write end has been closed and begins returning EOF from any reads after the receive buffer has been exhausted.

hashicorp-cla commented 4 years ago

CLA assistant check
All committers have signed the CLA.