limit the ACK delay by max_ack_delay

This commit is contained in:
Marten Seemann
2019-05-08 14:34:56 +09:00
parent 0e33f3c0da
commit 537737935c
5 changed files with 37 additions and 5 deletions

View File

@@ -58,6 +58,7 @@ type sentPacketHandler struct {
rttStats *congestion.RTTStats
handshakeComplete bool
maxAckDelay time.Duration
// The number of times the crypto packets have been retransmitted without receiving an ack.
cryptoCount uint32
@@ -122,6 +123,10 @@ func (h *sentPacketHandler) SetHandshakeComplete() {
h.handshakeComplete = true
}
func (h *sentPacketHandler) SetMaxAckDelay(mad time.Duration) {
h.maxAckDelay = mad
}
func (h *sentPacketHandler) SentPacket(packet *Packet) {
if isAckEliciting := h.sentPacketImpl(packet); isAckEliciting {
h.getPacketNumberSpace(packet.EncryptionLevel).history.SentPacket(packet)
@@ -208,7 +213,7 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *wire.AckFrame, withPacketNumbe
// don't use the ack delay for Initial and Handshake packets
var ackDelay time.Duration
if encLevel == protocol.Encryption1RTT {
ackDelay = ackFrame.DelayTime
ackDelay = utils.MinDuration(ackFrame.DelayTime, h.maxAckDelay)
}
h.rttStats.UpdateRTT(rcvTime.Sub(p.SendTime), ackDelay, rcvTime)
if h.logger.Debug() {