reduce buffer allocation
This commit is contained in:
parent
b2d5319d68
commit
d8af58cec7
10
relay.go
10
relay.go
@ -284,7 +284,7 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Log("[relay] %s <- %s: %s", c.Conn.LocalAddr(), c.Conn.RemoteAddr(), err)
|
log.Logf("[relay] %s <- %s: %s", c.Conn.LocalAddr(), c.Conn.RemoteAddr(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,7 +334,13 @@ func (c *relayConn) Write(b []byte) (n int, err error) {
|
|||||||
if !c.udp {
|
if !c.udp {
|
||||||
return c.Conn.Write(b)
|
return c.Conn.Write(b)
|
||||||
}
|
}
|
||||||
buf := make([]byte, 2+len(b))
|
var buf []byte
|
||||||
|
if 2+len(b) <= mediumBufferSize {
|
||||||
|
buf = mPool.Get().([]byte)
|
||||||
|
defer mPool.Put(buf)
|
||||||
|
} else {
|
||||||
|
buf = make([]byte, 2+len(b))
|
||||||
|
}
|
||||||
binary.BigEndian.PutUint16(buf[:2], uint16(len(b)))
|
binary.BigEndian.PutUint16(buf[:2], uint16(len(b)))
|
||||||
n = copy(buf[2:], b)
|
n = copy(buf[2:], b)
|
||||||
_, err = c.Conn.Write(buf)
|
_, err = c.Conn.Write(buf)
|
||||||
|
@ -563,7 +563,13 @@ func (h *tapHandler) Handle(conn net.Conn) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
pc = cc.(net.PacketConn)
|
var ok bool
|
||||||
|
pc, ok = cc.(net.PacketConn)
|
||||||
|
if !ok {
|
||||||
|
err = errors.New("not a packet connection")
|
||||||
|
log.Logf("[tap] %s - %s: %s", conn.LocalAddr(), raddr, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if h.options.TCPMode {
|
if h.options.TCPMode {
|
||||||
if raddr != nil {
|
if raddr != nil {
|
||||||
|
7
udp.go
7
udp.go
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user