From d27b659bf72e0452efe3b20664dab6b85126c7db Mon Sep 17 00:00:00 2001 From: e1732a364fed <75717694+e1732a364fed@users.noreply.github.com> Date: Sat, 1 Jan 2000 00:00:00 +0000 Subject: [PATCH] =?UTF-8?q?tun=20=E4=B8=8D=E7=94=A8chan=E8=80=8C=E7=94=A8?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=87=BD=E6=95=B0,=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用chan完全多此一举 --- netLayer/tun/tun.go | 9 +++------ proxy/tun/tun.go | 48 ++++++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/netLayer/tun/tun.go b/netLayer/tun/tun.go index a2eed12..220b10e 100644 --- a/netLayer/tun/tun.go +++ b/netLayer/tun/tun.go @@ -51,10 +51,7 @@ func (sc *StackCloser) Close() error { return nil } -func Listen(dev device.Device) (tcpChan chan netLayer.TCPRequestInfo, udpChan chan netLayer.UDPRequestInfo, closer io.Closer, err error) { - - tcpChan = make(chan netLayer.TCPRequestInfo) - udpChan = make(chan netLayer.UDPRequestInfo) +func Listen(dev device.Device, tcpFunc func(netLayer.TCPRequestInfo), udpFunc func(netLayer.UDPRequestInfo)) (closer io.Closer, err error) { s := stack.New(stack.Options{ NetworkProtocols: []stack.NetworkProtocolFactory{ @@ -130,7 +127,7 @@ func Listen(dev device.Device) (tcpChan chan netLayer.TCPRequestInfo, udpChan ch // log.Printf("forward tcp request %s:%d->%s:%d\n", // id.RemoteAddress, id.RemotePort, id.LocalAddress, id.LocalPort) - tcpChan <- info + go tcpFunc(info) r.Complete(false) }) @@ -160,7 +157,7 @@ func Listen(dev device.Device) (tcpChan chan netLayer.TCPRequestInfo, udpChan ch }, } - udpChan <- info + go udpFunc(info) }) s.SetTransportProtocolHandler(udp.ProtocolNumber, udpForwarder.HandlePacket) diff --git a/proxy/tun/tun.go b/proxy/tun/tun.go index 3488478..052ca27 100644 --- a/proxy/tun/tun.go +++ b/proxy/tun/tun.go @@ -242,7 +242,29 @@ func (s *Server) StartListen(tcpFunc func(netLayer.TCPRequestInfo), udpFunc func autoRouteFunc(s.devName, s.realIP, s.selfip, s.autoRouteDirectList) } - newTchan, newUchan, stackCloser, err := tun.Listen(tunDev) + newTcpFunc := func(info netLayer.TCPRequestInfo) { + if s.stopped { + return + } + if ce := utils.CanLogInfo("tun got new tcp"); ce != nil { + ce.Write(zap.String("->", info.Target.String())) + } + + tcpFunc(info) + } + + newUdpFunc := func(info netLayer.UDPRequestInfo) { + if s.stopped { + return + } + if ce := utils.CanLogInfo("tun got new udp"); ce != nil { + ce.Write(zap.String("->", info.Target.String())) + } + udpFunc(info) + + } + + stackCloser, err := tun.Listen(tunDev, newTcpFunc, newUdpFunc) if err != nil { if ce := utils.CanLogErr("tun listen failed"); ce != nil { @@ -252,30 +274,6 @@ func (s *Server) StartListen(tcpFunc func(netLayer.TCPRequestInfo), udpFunc func return nil } - go func() { - for tr := range newTchan { - if s.stopped { - return - } - if ce := utils.CanLogInfo("tun got new tcp"); ce != nil { - ce.Write(zap.String("->", tr.Target.String())) - } - go tcpFunc(tr) - - } - }() - - go func() { - for ur := range newUchan { - if s.stopped { - return - } - if ce := utils.CanLogInfo("tun got new udp"); ce != nil { - ce.Write(zap.String("->", ur.Target.String())) - } - go udpFunc(ur) - } - }() s.stackCloser = stackCloser s.tunDev = tunDev