|
@@ -86,9 +86,14 @@ type sendReady struct {
|
|
|
|
|
|
// newSession is used to construct a new session
|
|
// newSession is used to construct a new session
|
|
func newSession(config *Config, conn io.ReadWriteCloser, client bool) *Session {
|
|
func newSession(config *Config, conn io.ReadWriteCloser, client bool) *Session {
|
|
|
|
+ logger := config.Logger
|
|
|
|
+ if logger == nil {
|
|
|
|
+ logger = log.New(config.LogOutput, "", log.LstdFlags)
|
|
|
|
+ }
|
|
|
|
+
|
|
s := &Session{
|
|
s := &Session{
|
|
config: config,
|
|
config: config,
|
|
- logger: log.New(config.LogOutput, "", log.LstdFlags),
|
|
|
|
|
|
+ logger: logger,
|
|
conn: conn,
|
|
conn: conn,
|
|
bufRead: bufio.NewReader(conn),
|
|
bufRead: bufio.NewReader(conn),
|
|
pings: make(map[uint32]chan struct{}),
|
|
pings: make(map[uint32]chan struct{}),
|
|
@@ -309,8 +314,10 @@ func (s *Session) keepalive() {
|
|
case <-time.After(s.config.KeepAliveInterval):
|
|
case <-time.After(s.config.KeepAliveInterval):
|
|
_, err := s.Ping()
|
|
_, err := s.Ping()
|
|
if err != nil {
|
|
if err != nil {
|
|
- s.logger.Printf("[ERR] yamux: keepalive failed: %v", err)
|
|
|
|
- s.exitErr(ErrKeepAliveTimeout)
|
|
|
|
|
|
+ if err != ErrSessionShutdown {
|
|
|
|
+ s.logger.Printf("[ERR] yamux: keepalive failed: %v", err)
|
|
|
|
+ s.exitErr(ErrKeepAliveTimeout)
|
|
|
|
+ }
|
|
return
|
|
return
|
|
}
|
|
}
|
|
case <-s.shutdownCh:
|
|
case <-s.shutdownCh:
|