diff --git a/vendor/github.com/xtaci/smux/README.md b/vendor/github.com/xtaci/smux/README.md index 1b71a2f..a5c4680 100644 --- a/vendor/github.com/xtaci/smux/README.md +++ b/vendor/github.com/xtaci/smux/README.md @@ -5,7 +5,7 @@ smux [1]: https://godoc.org/github.com/xtaci/smux?status.svg -[2]: https://pkg.go.dev/github.com/xtaci/smux +[2]: https://godoc.org/github.com/xtaci/smux [3]: https://img.shields.io/badge/license-MIT-blue.svg [4]: LICENSE [5]: https://travis-ci.org/xtaci/smux.svg?branch=master @@ -34,7 +34,7 @@ Smux ( **S**imple **MU**ltiple**X**ing) is a multiplexing library for Golang. It ## Documentation -For complete documentation, see the associated [Godoc](https://pkg.go.dev/github.com/xtaci/smux). +For complete documentation, see the associated [Godoc](https://godoc.org/github.com/xtaci/smux). ## Benchmark ``` diff --git a/vendor/github.com/xtaci/smux/mux.go b/vendor/github.com/xtaci/smux/mux.go index eadfcec..c0b8ab8 100644 --- a/vendor/github.com/xtaci/smux/mux.go +++ b/vendor/github.com/xtaci/smux/mux.go @@ -17,6 +17,9 @@ type Config struct { // SMUX Protocol version, support 1,2 Version int + // Disabled keepalive + KeepAliveDisabled bool + // KeepAliveInterval is how often to send a NOP command to the remote KeepAliveInterval time.Duration @@ -54,11 +57,13 @@ func VerifyConfig(config *Config) error { if !(config.Version == 1 || config.Version == 2) { return errors.New("unsupported protocol version") } - if config.KeepAliveInterval == 0 { - return errors.New("keep-alive interval must be positive") - } - if config.KeepAliveTimeout < config.KeepAliveInterval { - return fmt.Errorf("keep-alive timeout must be larger than keep-alive interval") + if !config.KeepAliveDisabled { + if config.KeepAliveInterval == 0 { + return errors.New("keep-alive interval must be positive") + } + if config.KeepAliveTimeout < config.KeepAliveInterval { + return fmt.Errorf("keep-alive timeout must be larger than keep-alive interval") + } } if config.MaxFrameSize <= 0 { return errors.New("max frame size must be positive") diff --git a/vendor/github.com/xtaci/smux/session.go b/vendor/github.com/xtaci/smux/session.go index 0094469..bc56066 100644 --- a/vendor/github.com/xtaci/smux/session.go +++ b/vendor/github.com/xtaci/smux/session.go @@ -104,7 +104,9 @@ func newSession(config *Config, conn io.ReadWriteCloser, client bool) *Session { go s.shaperLoop() go s.recvLoop() go s.sendLoop() - go s.keepalive() + if !config.KeepAliveDisabled { + go s.keepalive() + } return s } diff --git a/vendor/github.com/xtaci/smux/stream.go b/vendor/github.com/xtaci/smux/stream.go index b21bdef..6c9499c 100644 --- a/vendor/github.com/xtaci/smux/stream.go +++ b/vendor/github.com/xtaci/smux/stream.go @@ -272,6 +272,12 @@ func (s *Stream) waitRead() error { case <-s.chReadEvent: return nil case <-s.chFinEvent: + // BUG(xtaci): Fix for https://github.com/xtaci/smux/issues/82 + s.bufferLock.Lock() + defer s.bufferLock.Unlock() + if len(s.buffers) > 0 { + return nil + } return io.EOF case <-s.sess.chSocketReadError: return s.sess.socketReadError.Load().(error) diff --git a/vendor/modules.txt b/vendor/modules.txt index eb23a42..84474e2 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -41,7 +41,7 @@ github.com/urfave/cli # github.com/xtaci/kcp-go/v5 v5.6.1 ## explicit github.com/xtaci/kcp-go/v5 -# github.com/xtaci/smux v1.5.14 +# github.com/xtaci/smux v1.5.15 ## explicit github.com/xtaci/smux # github.com/xtaci/tcpraw v1.2.25