|
|
@ -89,7 +89,9 @@ func UDPListener(addr string, cfg *UDPListenConfig) (Listener, error) { |
|
|
|
|
|
|
|
|
func (l *udpListener) listenLoop() { |
|
|
func (l *udpListener) listenLoop() { |
|
|
for { |
|
|
for { |
|
|
b := make([]byte, mediumBufferSize) |
|
|
// NOTE: this buffer will be released in the udpServerConn after read.
|
|
|
|
|
|
b := mPool.Get().([]byte) |
|
|
|
|
|
|
|
|
n, raddr, err := l.ln.ReadFrom(b) |
|
|
n, raddr, err := l.ln.ReadFrom(b) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
log.Logf("[udp] peer -> %s : %s", l.Addr(), err) |
|
|
log.Logf("[udp] peer -> %s : %s", l.Addr(), err) |
|
|
@ -240,6 +242,9 @@ func (c *udpServerConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) { |
|
|
select { |
|
|
select { |
|
|
case bb := <-c.rChan: |
|
|
case bb := <-c.rChan: |
|
|
n = copy(b, bb) |
|
|
n = copy(b, bb) |
|
|
|
|
|
if cap(bb) == mediumBufferSize { |
|
|
|
|
|
mPool.Put(bb[:cap(bb)]) |
|
|
|
|
|
} |
|
|
case <-c.closed: |
|
|
case <-c.closed: |
|
|
err = errors.New("read from closed connection") |
|
|
err = errors.New("read from closed connection") |
|
|
return |
|
|
return |
|
|
|