diff --git a/session.go b/session.go index 2769f074..376aa7fc 100644 --- a/session.go +++ b/session.go @@ -305,7 +305,7 @@ runLoop: s.sentPacketHandler.OnAlarm() } - if s.config.KeepAlive && time.Since(s.lastNetworkActivityTime) >= s.idleTimeout()/2 { + if s.config.KeepAlive && s.handshakeComplete && time.Since(s.lastNetworkActivityTime) >= s.idleTimeout()/2 { // send the PING frame since there is no activity in the session s.packer.QueueControlFrame(&frames.PingFrame{}) s.keepAlivePingSent = true @@ -343,7 +343,7 @@ func (s *session) WaitUntilClosed() { func (s *session) maybeResetTimer() { var deadline time.Time - if s.config.KeepAlive && !s.keepAlivePingSent { + if s.config.KeepAlive && s.handshakeComplete && !s.keepAlivePingSent { deadline = s.lastNetworkActivityTime.Add(s.idleTimeout() / 2) } else { deadline = s.lastNetworkActivityTime.Add(s.idleTimeout()) diff --git a/session_test.go b/session_test.go index e3b911d8..91c6fe48 100644 --- a/session_test.go +++ b/session_test.go @@ -1438,7 +1438,8 @@ var _ = Describe("Session", func() { }) Context("keep-alives", func() { - It("sends a ping packet", func() { + It("sends a PING", func() { + sess.handshakeComplete = true sess.config.KeepAlive = true sess.lastNetworkActivityTime = time.Now().Add(-(sess.idleTimeout() / 2)) go sess.run() @@ -1452,7 +1453,17 @@ var _ = Describe("Session", func() { }).Should(Equal(byte(0x07))) }) - It("doesn't send a ping packet if keep-alive is disabled", func() { + It("doesn't send a PING packet if keep-alive is disabled", func() { + sess.handshakeComplete = true + sess.lastNetworkActivityTime = time.Now().Add(-(sess.idleTimeout() / 2)) + go sess.run() + defer sess.Close(nil) + Consistently(func() [][]byte { return mconn.written }).Should(BeEmpty()) + }) + + It("doesn't send a PING if the handshake isn't completed yet", func() { + sess.handshakeComplete = false + sess.config.KeepAlive = true sess.lastNetworkActivityTime = time.Now().Add(-(sess.idleTimeout() / 2)) go sess.run() defer sess.Close(nil)