forked from quic-go/quic-go
@@ -113,11 +113,11 @@ func (p *packetPacker) packPacket(stopWaitingFrame *frames.StopWaitingFrame, con
|
||||
// Don't send out packets that only contain an ACK (plus optional STOP_WAITING), if requested
|
||||
if !maySendOnlyAck {
|
||||
if len(payloadFrames) == 1 {
|
||||
if _, ok := payloadFrames[0].(*frames.AckFrameLegacy); ok {
|
||||
if _, ok := payloadFrames[0].(*frames.AckFrame); ok {
|
||||
return nil, nil
|
||||
}
|
||||
} else if len(payloadFrames) == 2 && stopWaitingFrame != nil {
|
||||
if _, ok := payloadFrames[1].(*frames.AckFrameLegacy); ok {
|
||||
if _, ok := payloadFrames[1].(*frames.AckFrame); ok {
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,19 +464,19 @@ var _ = Describe("Packet packer", func() {
|
||||
})
|
||||
|
||||
It("returns nil if we only have a single STOP_WAITING and an ACK", func() {
|
||||
p, err := packer.PackPacket(&frames.StopWaitingFrame{}, []frames.Frame{&frames.AckFrameLegacy{}}, 0, false)
|
||||
p, err := packer.PackPacket(&frames.StopWaitingFrame{}, []frames.Frame{&frames.AckFrame{}}, 0, false)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(p).To(BeNil())
|
||||
})
|
||||
|
||||
It("returns nil if we only have a single ACK", func() {
|
||||
p, err := packer.PackPacket(nil, []frames.Frame{&frames.AckFrameLegacy{}}, 0, false)
|
||||
p, err := packer.PackPacket(nil, []frames.Frame{&frames.AckFrame{}}, 0, false)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(p).To(BeNil())
|
||||
})
|
||||
|
||||
It("does not return nil if we only have a single ACK but request it to be sent", func() {
|
||||
p, err := packer.PackPacket(nil, []frames.Frame{&frames.AckFrameLegacy{}}, 0, true)
|
||||
p, err := packer.PackPacket(nil, []frames.Frame{&frames.AckFrame{}}, 0, true)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(p).ToNot(BeNil())
|
||||
})
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"runtime"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
@@ -490,6 +491,9 @@ func (s *Session) sendPacket() error {
|
||||
|
||||
// Check whether we are allowed to send a packet containing only an ACK
|
||||
maySendOnlyAck := time.Now().Sub(s.delayedAckOriginTime) > protocol.AckSendDelay
|
||||
if runtime.GOOS == "windows" {
|
||||
maySendOnlyAck = true
|
||||
}
|
||||
|
||||
hasRetransmission := s.streamFramer.HasFramesForRetransmission()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user