Skip to content

Commit d8af58c

Browse files
committed
reduce buffer allocation
1 parent b2d5319 commit d8af58c

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

relay.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
284284
})
285285

286286
if err != nil {
287-
log.Log("[relay] %s <- %s: %s", c.Conn.LocalAddr(), c.Conn.RemoteAddr(), err)
287+
log.Logf("[relay] %s <- %s: %s", c.Conn.LocalAddr(), c.Conn.RemoteAddr(), err)
288288
return
289289
}
290290

@@ -334,7 +334,13 @@ func (c *relayConn) Write(b []byte) (n int, err error) {
334334
if !c.udp {
335335
return c.Conn.Write(b)
336336
}
337-
buf := make([]byte, 2+len(b))
337+
var buf []byte
338+
if 2+len(b) <= mediumBufferSize {
339+
buf = mPool.Get().([]byte)
340+
defer mPool.Put(buf)
341+
} else {
342+
buf = make([]byte, 2+len(b))
343+
}
338344
binary.BigEndian.PutUint16(buf[:2], uint16(len(b)))
339345
n = copy(buf[2:], b)
340346
_, err = c.Conn.Write(buf)

tuntap.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,13 @@ func (h *tapHandler) Handle(conn net.Conn) {
563563
if err != nil {
564564
return err
565565
}
566-
pc = cc.(net.PacketConn)
566+
var ok bool
567+
pc, ok = cc.(net.PacketConn)
568+
if !ok {
569+
err = errors.New("not a packet connection")
570+
log.Logf("[tap] %s - %s: %s", conn.LocalAddr(), raddr, err)
571+
return err
572+
}
567573
} else {
568574
if h.options.TCPMode {
569575
if raddr != nil {

udp.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ func UDPListener(addr string, cfg *UDPListenConfig) (Listener, error) {
8989

9090
func (l *udpListener) listenLoop() {
9191
for {
92-
b := make([]byte, mediumBufferSize)
92+
// NOTE: this buffer will be released in the udpServerConn after read.
93+
b := mPool.Get().([]byte)
94+
9395
n, raddr, err := l.ln.ReadFrom(b)
9496
if err != nil {
9597
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) {
240242
select {
241243
case bb := <-c.rChan:
242244
n = copy(b, bb)
245+
if cap(bb) == mediumBufferSize {
246+
mPool.Put(bb[:cap(bb)])
247+
}
243248
case <-c.closed:
244249
err = errors.New("read from closed connection")
245250
return

0 commit comments

Comments
 (0)