packet.go 480 B

123456789101112131415161718192021222324252627282930313233343536
  1. package packet
  2. import (
  3. "net/netip"
  4. "sync"
  5. )
  6. const Size = 9001
  7. type Packet struct {
  8. Payload []byte
  9. Addr netip.AddrPort
  10. }
  11. func New() *Packet {
  12. return &Packet{Payload: make([]byte, Size)}
  13. }
  14. type Pool struct {
  15. pool sync.Pool
  16. }
  17. func NewPool() *Pool {
  18. return &Pool{
  19. pool: sync.Pool{New: func() any { return New() }},
  20. }
  21. }
  22. func (p *Pool) Get() *Packet {
  23. return p.pool.Get().(*Packet)
  24. }
  25. func (p *Pool) Put(x *Packet) {
  26. x.Payload = x.Payload[:Size]
  27. p.pool.Put(x)
  28. }