Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/net/websocket: Read() doesn't read the whole frame #27967

antong opened this issue Oct 2, 2018 · 3 comments

x/net/websocket: Read() doesn't read the whole frame #27967

antong opened this issue Oct 2, 2018 · 3 comments


Copy link

@antong antong commented Oct 2, 2018

The documentation for websocket.(*Conn).Read() states:

func (ws *Conn) Read(msg []byte) (n int, err error)

Read implements the io.Reader interface: it reads data of a frame from the WebSocket connection.
if msg is not large enough for the frame data, it fills the msg and next Read will read the rest of the
frame data. it reads Text frame or Binary frame.

I interpret this as meaning that if msg is large enough, then the whole frame will be read (exceptio probat regulam in casibus non exceptis, the exception proves the rule).

However, in case of large frames (larger than bufio defaultBufSize) the read will always be short. Either the documentation or the implementation is wrong.

websocket.Message.Receive() does read the whole frame.

What version of Go are you using (go version)?


Does this issue reproduce with the latest release?


What operating system and processor architecture are you using (go env)?

Reproduced on:

  • GOOS=windows GOARCH=amd64
  • GOOS=linux GOARCH=amd64

What did you do?

I connected an x/net/websocket client and server, and had the server write a 5000 byte long frame using websocket.(*Conn).Write() and the client read it using websocket.(*Conn).Read().


What did you expect to see?

I expected websocket.(*Conn).Read() to read the whole 5000 byte long frame.

What did you see instead?

websocket.(*Conn).Read() read only 4092 bytes of the 5000 byte long frame.

@gopherbot gopherbot added this to the Unreleased milestone Oct 2, 2018
Copy link

@gopherbot gopherbot commented Dec 13, 2018

Change mentions this issue: websocket: make Read reads the entire frame if the provided slice is large enough

Copy link

@gopherbot gopherbot commented Feb 13, 2019

Change mentions this issue: websocket: read entire frame if provided slice is large enough

Copy link
Contributor Author

@antong antong commented Sep 7, 2019

I think this actually is the same as #2134.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants