From c0daf721ea840a6fd39baf92a32f56e6fb993712 Mon Sep 17 00:00:00 2001 From: p_caiwfeng Date: Mon, 6 Dec 2021 14:44:40 +0800 Subject: [PATCH] fix too many open files bug --- core/tcpserver.go | 21 +++++++++++++++++++-- core/tunhandler.go | 10 +++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/core/tcpserver.go b/core/tcpserver.go index 738d6810..be03a64a 100644 --- a/core/tcpserver.go +++ b/core/tcpserver.go @@ -4,11 +4,10 @@ import ( "bytes" "context" "fmt" + log "github.com/sirupsen/logrus" "github.com/wencaiwulue/kubevpn/util" "net" "time" - - log "github.com/sirupsen/logrus" ) type fakeUDPTunConnector struct { @@ -236,3 +235,21 @@ func (c *fakeUDPTunnelConn) WriteTo(b []byte, addr net.Addr) (n int, err error) } return len(b), nil } + +func (c *fakeUDPTunnelConn) Close() error { + return c.Conn.Close() +} + +func (c *fakeUDPTunnelConn) CloseWrite() error { + if cc, ok := c.Conn.(interface{ CloseWrite() error }); ok { + return cc.CloseWrite() + } + return nil +} + +func (c *fakeUDPTunnelConn) CloseRead() error { + if cc, ok := c.Conn.(interface{ CloseRead() error }); ok { + return cc.CloseRead() + } + return nil +} diff --git a/core/tunhandler.go b/core/tunhandler.go index 41b404f7..729ba3c8 100644 --- a/core/tunhandler.go +++ b/core/tunhandler.go @@ -135,7 +135,15 @@ func (h *tunHandler) findRouteFor(dst net.IP) net.Addr { func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.Addr) error { errChan := make(chan error, 2) - defer conn.Close() + defer func() { + if c, ok := conn.(interface{ CloseRead() error }); ok { + _ = c.CloseRead() + } + if c, ok := conn.(interface{ CloseWrite() error }); ok { + _ = c.CloseWrite() + } + _ = conn.Close() + }() ctx, cancelFunc := context.WithCancel(context.Background()) remote.CancelFunctions = append(remote.CancelFunctions, cancelFunc) go func() {