From d502b0671261efa49c98a3f939e7827fc69a47ba Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 4 Jan 2018 17:07:39 +0800 Subject: [PATCH] fix bug: read 0 bytes from a stream will block forever --- stream.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/stream.go b/stream.go index 1b3ebe0..57a0bc6 100644 --- a/stream.go +++ b/stream.go @@ -44,6 +44,15 @@ func (s *Stream) ID() uint32 { // Read implements net.Conn func (s *Stream) Read(b []byte) (n int, err error) { + if len(b) == 0 { + select { + case <-s.die: + return 0, errors.New(errBrokenPipe) + default: + return 0, nil + } + } + var deadline <-chan time.Time if d, ok := s.readDeadline.Load().(time.Time); ok && !d.IsZero() { timer := time.NewTimer(time.Until(d))