diff --git a/session.go b/session.go index db10e667..b47eeb92 100644 --- a/session.go +++ b/session.go @@ -240,6 +240,11 @@ func (s *Session) handlePacketImpl(remoteAddr interface{}, hdr *publicHeader, da } err = s.receivedPacketHandler.ReceivedPacket(hdr.PacketNumber, packet.entropyBit) + // ignore duplicate packets + if err == ackhandlerlegacy.ErrDuplicatePacket { + return nil + } + if err != nil { return err } diff --git a/session_test.go b/session_test.go index 523305ae..5a96944c 100644 --- a/session_test.go +++ b/session_test.go @@ -426,6 +426,14 @@ var _ = Describe("Session", func() { Expect(err).ToNot(HaveOccurred()) Expect(session.lastRcvdPacketNumber).To(Equal(protocol.PacketNumber(3))) }) + + It("ignores duplicate packets", func() { + hdr.PacketNumber = 5 + err := session.handlePacketImpl(nil, hdr, nil) + Expect(err).ToNot(HaveOccurred()) + err = session.handlePacketImpl(nil, hdr, nil) + Expect(err).ToNot(HaveOccurred()) + }) }) Context("sending packets", func() {