123456789101112131415161718192021222324252627282930313233343536 |
- package packet
- import (
- "net"
- "sync"
- )
- type threadSafePacketConn struct {
- EnhancePacketConn
- access sync.Mutex
- }
- func (c *threadSafePacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
- c.access.Lock()
- defer c.access.Unlock()
- return c.EnhancePacketConn.WriteTo(b, addr)
- }
- func (c *threadSafePacketConn) Upstream() any {
- return c.EnhancePacketConn
- }
- func (c *threadSafePacketConn) ReaderReplaceable() bool {
- return true
- }
- func NewThreadSafePacketConn(pc net.PacketConn) EnhancePacketConn {
- tsPC := &threadSafePacketConn{EnhancePacketConn: NewEnhancePacketConn(pc)}
- if singPC, isSingPC := pc.(SingPacketConn); isSingPC {
- return &threadSafeSingPacketConn{
- threadSafePacketConn: tsPC,
- singPacketConn: singPC,
- }
- }
- return tsPC
- }
|