| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package packet
- import (
- "net/netip"
- "sync"
- "golang.org/x/sys/unix"
- )
- const Size = 0xffff
- type Packet struct {
- Payload []byte
- Control []byte
- SegSize int
- Addr netip.AddrPort
- }
- func New() *Packet {
- return &Packet{
- Payload: make([]byte, Size),
- Control: make([]byte, unix.CmsgSpace(2)),
- }
- }
- type Pool struct {
- pool sync.Pool
- }
- var bigPool = &Pool{
- pool: sync.Pool{New: func() any { return New() }},
- }
- func GetPool() *Pool {
- return bigPool
- }
- func (p *Pool) Get() *Packet {
- return p.pool.Get().(*Packet)
- }
- func (p *Pool) Put(x *Packet) {
- x.Payload = x.Payload[:Size]
- p.pool.Put(x)
- }
|