mirror of
https://github.com/golang/net.git
synced 2026-03-31 18:37:08 +09:00
The x/net go.mod now depends on go1.23. Change-Id: I24960949d84753f84f75fbdc97b7dfb92191a4d2 Reviewed-on: https://go-review.googlesource.com/c/net/+/664295 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Jonathan Amsterdam <jba@google.com> Auto-Submit: Damien Neil <dneil@google.com>
54 lines
921 B
Go
54 lines
921 B
Go
// Copyright 2023 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package quic
|
|
|
|
import (
|
|
"net/netip"
|
|
"sync"
|
|
)
|
|
|
|
type datagram struct {
|
|
b []byte
|
|
localAddr netip.AddrPort
|
|
peerAddr netip.AddrPort
|
|
ecn ecnBits
|
|
}
|
|
|
|
// Explicit Congestion Notification bits.
|
|
//
|
|
// https://www.rfc-editor.org/rfc/rfc3168.html#section-5
|
|
type ecnBits byte
|
|
|
|
const (
|
|
ecnMask = 0b000000_11
|
|
ecnNotECT = 0b000000_00
|
|
ecnECT1 = 0b000000_01
|
|
ecnECT0 = 0b000000_10
|
|
ecnCE = 0b000000_11
|
|
)
|
|
|
|
var datagramPool = sync.Pool{
|
|
New: func() any {
|
|
return &datagram{
|
|
b: make([]byte, maxUDPPayloadSize),
|
|
}
|
|
},
|
|
}
|
|
|
|
func newDatagram() *datagram {
|
|
m := datagramPool.Get().(*datagram)
|
|
*m = datagram{
|
|
b: m.b[:cap(m.b)],
|
|
}
|
|
return m
|
|
}
|
|
|
|
func (m *datagram) recycle() {
|
|
if cap(m.b) != maxUDPPayloadSize {
|
|
return
|
|
}
|
|
datagramPool.Put(m)
|
|
}
|