forked from quic-go/quic-go
don't send PINGs before the handshake is completed
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user