don't send PINGs before the handshake is completed

This commit is contained in:
Marten Seemann
2017-07-12 11:14:03 +07:00
parent 58899d0e02
commit 7341282f27
2 changed files with 15 additions and 4 deletions

View File

@@ -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())

View File

@@ -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)