mirror of
https://github.com/soheilhy/cmux.git
synced 2026-08-04 10:03:51 +08:00
Fix a blocking issue in buffer reader
After sniffing and buffering data, if we try to read from the socket again, bufio.Reader may block. This breaks HTTP handlers in go1.5.2+ if one tries on browsers or with curl. Go's HTTP client, however, is not broken. This issue is also there with TeeReader. Return immediately with the data in the sniffed buffer.
This commit is contained in:
@@ -279,7 +279,13 @@ func TestHTTP2(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var b [len(http2.ClientPreface)]byte
|
||||
if _, err := muxedConn.Read(b[:]); err != io.EOF {
|
||||
var n int
|
||||
// We have the sniffed buffer first...
|
||||
if n, err = muxedConn.Read(b[:]); err == io.EOF {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// and then we read from the source.
|
||||
if _, err = muxedConn.Read(b[n:]); err != io.EOF {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if string(b[:]) != http2.ClientPreface {
|
||||
|
||||
Reference in New Issue
Block a user