diff --git a/relay.go b/relay.go index 9f3a30d..94699cb 100644 --- a/relay.go +++ b/relay.go @@ -334,16 +334,18 @@ func (c *relayConn) Write(b []byte) (n int, err error) { if !c.udp { return c.Conn.Write(b) } + + nsize := 2 + len(b) var buf []byte - if 2+len(b) <= mediumBufferSize { + if nsize <= mediumBufferSize { buf = mPool.Get().([]byte) defer mPool.Put(buf) } else { - buf = make([]byte, 2+len(b)) + buf = make([]byte, nsize) } binary.BigEndian.PutUint16(buf[:2], uint16(len(b))) n = copy(buf[2:], b) - _, err = c.Conn.Write(buf) + _, err = c.Conn.Write(buf[:nsize]) return } diff --git a/tuntap.go b/tuntap.go index 03feb4d..24bed37 100644 --- a/tuntap.go +++ b/tuntap.go @@ -336,7 +336,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A for { err := func() error { b := sPool.Get().([]byte) - defer mPool.Put(b) + defer sPool.Put(b) n, addr, err := conn.ReadFrom(b) if err != nil && @@ -698,7 +698,7 @@ func (h *tapHandler) transportTap(tap net.Conn, conn net.PacketConn, raddr net.A for { err := func() error { b := sPool.Get().([]byte) - defer mPool.Put(b) + defer sPool.Put(b) n, addr, err := conn.ReadFrom(b) if err != nil &&