diff --git a/session.go b/session.go index de47e5f..c1bad08 100644 --- a/session.go +++ b/session.go @@ -118,6 +118,9 @@ func (s *Session) Close() error { for k := range s.streams { s.streams[k].Close() } + f := newFrame(cmdTerminate, 0) + bts, _ := f.MarshalBinary() + s.lw.Write(bts) } return nil } diff --git a/session_test.go b/session_test.go index c994de6..65fd32f 100644 --- a/session_test.go +++ b/session_test.go @@ -3,6 +3,7 @@ package smux import ( "fmt" "io" + "log" "net" "sync" "testing" @@ -34,17 +35,21 @@ func init() { func handleConnection(conn net.Conn) { session, _ := Server(conn, maxFrames, frameSize) for { - stream, _ := session.AcceptStream() - go func(s io.ReadWriteCloser) { - buf := make([]byte, 65536) - for { - n, err := s.Read(buf) - if err != nil { - return + if stream, err := session.AcceptStream(); err == nil { + go func(s io.ReadWriteCloser) { + buf := make([]byte, 65536) + for { + n, err := s.Read(buf) + if err != nil { + return + } + s.Write(buf[:n]) } - s.Write(buf[:n]) - } - }(stream) + }(stream) + } else { + log.Println(err) + return + } } }