chore(pmtud/tcp): close connections with an RST packet on context cancelation

This commit is contained in:
Quentin McGaw
2026-02-19 12:22:42 +00:00
parent bc79901f1e
commit 783616f61d
+4 -1
View File
@@ -107,6 +107,7 @@ func runTest(ctx context.Context, dst netip.AddrPort, mtu uint32,
var reply []byte var reply []byte
select { select {
case <-ctx.Done(): case <-ctx.Done():
_ = sendRST(fd, src, dst, synSeq+1)
return ctx.Err() return ctx.Err()
case reply = <-ch: case reply = <-ch:
} }
@@ -149,6 +150,7 @@ func runTest(ctx context.Context, dst netip.AddrPort, mtu uint32,
select { select {
case <-ctx.Done(): case <-ctx.Done():
_ = sendRST(fd, src, dst, firstReplyHeader.ack)
return ctx.Err() return ctx.Err()
case reply = <-ch: case reply = <-ch:
} }
@@ -180,7 +182,7 @@ var errTCPPacketNotRST = errors.New("TCP packet is not an RST")
func handleRSTReply(ctx context.Context, fd fileDescriptor, ch <-chan []byte, func handleRSTReply(ctx context.Context, fd fileDescriptor, ch <-chan []byte,
src, dst netip.AddrPort, mtu uint32, src, dst netip.AddrPort, mtu uint32,
) error { ) error {
packet, _ := createSYNPacket(src, dst, mtu) packet, synSeq := createSYNPacket(src, dst, mtu)
const sendToFlags = 0 const sendToFlags = 0
err := sendTo(fd, packet, sendToFlags, makeSockAddr(dst)) err := sendTo(fd, packet, sendToFlags, makeSockAddr(dst))
if err != nil { if err != nil {
@@ -190,6 +192,7 @@ func handleRSTReply(ctx context.Context, fd fileDescriptor, ch <-chan []byte,
var reply []byte var reply []byte
select { select {
case <-ctx.Done(): case <-ctx.Done():
_ = sendRST(fd, src, dst, synSeq+1)
return ctx.Err() // timeout: the MTU test SYN packet was too big return ctx.Err() // timeout: the MTU test SYN packet was too big
case reply = <-ch: case reply = <-ch:
} }