chore: decrease goroutine used in core tunnel
This commit is contained in:
@ -22,7 +22,7 @@ type Listener struct {
|
||||
|
||||
var _listener *Listener
|
||||
|
||||
func New(config LC.ShadowsocksServer, tcpIn chan<- C.ConnContext, udpIn chan<- C.PacketAdapter) (*Listener, error) {
|
||||
func New(config LC.ShadowsocksServer, tunnel C.Tunnel) (*Listener, error) {
|
||||
pickCipher, err := core.PickCipher(config.Cipher, nil, config.Password)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -36,7 +36,7 @@ func New(config LC.ShadowsocksServer, tcpIn chan<- C.ConnContext, udpIn chan<- C
|
||||
|
||||
if config.Udp {
|
||||
//UDP
|
||||
ul, err := NewUDP(addr, pickCipher, udpIn)
|
||||
ul, err := NewUDP(addr, pickCipher, tunnel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -60,7 +60,7 @@ func New(config LC.ShadowsocksServer, tcpIn chan<- C.ConnContext, udpIn chan<- C
|
||||
continue
|
||||
}
|
||||
N.TCPKeepAlive(c)
|
||||
go sl.HandleConn(c, tcpIn)
|
||||
go sl.HandleConn(c, tunnel)
|
||||
}
|
||||
}()
|
||||
}
|
||||
@ -99,7 +99,7 @@ func (l *Listener) AddrList() (addrList []net.Addr) {
|
||||
return
|
||||
}
|
||||
|
||||
func (l *Listener) HandleConn(conn net.Conn, in chan<- C.ConnContext, additions ...inbound.Addition) {
|
||||
func (l *Listener) HandleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) {
|
||||
conn = l.pickCipher.StreamConn(conn)
|
||||
conn = N.NewDeadlineConn(conn) // embed ss can't handle readDeadline correctly
|
||||
|
||||
@ -108,12 +108,12 @@ func (l *Listener) HandleConn(conn net.Conn, in chan<- C.ConnContext, additions
|
||||
_ = conn.Close()
|
||||
return
|
||||
}
|
||||
in <- inbound.NewSocket(target, conn, C.SHADOWSOCKS, additions...)
|
||||
tunnel.HandleTCPConn(inbound.NewSocket(target, conn, C.SHADOWSOCKS, additions...))
|
||||
}
|
||||
|
||||
func HandleShadowSocks(conn net.Conn, in chan<- C.ConnContext, additions ...inbound.Addition) bool {
|
||||
func HandleShadowSocks(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) bool {
|
||||
if _listener != nil && _listener.pickCipher != nil {
|
||||
go _listener.HandleConn(conn, in, additions...)
|
||||
go _listener.HandleConn(conn, tunnel, additions...)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -17,7 +17,7 @@ type UDPListener struct {
|
||||
closed bool
|
||||
}
|
||||
|
||||
func NewUDP(addr string, pickCipher core.Cipher, in chan<- C.PacketAdapter) (*UDPListener, error) {
|
||||
func NewUDP(addr string, pickCipher core.Cipher, tunnel C.Tunnel) (*UDPListener, error) {
|
||||
l, err := net.ListenPacket("udp", addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -42,7 +42,7 @@ func NewUDP(addr string, pickCipher core.Cipher, in chan<- C.PacketAdapter) (*UD
|
||||
}
|
||||
continue
|
||||
}
|
||||
handleSocksUDP(conn, in, data, put, remoteAddr)
|
||||
handleSocksUDP(conn, tunnel, data, put, remoteAddr)
|
||||
}
|
||||
}()
|
||||
|
||||
@ -58,7 +58,7 @@ func (l *UDPListener) LocalAddr() net.Addr {
|
||||
return l.packetConn.LocalAddr()
|
||||
}
|
||||
|
||||
func handleSocksUDP(pc net.PacketConn, in chan<- C.PacketAdapter, buf []byte, put func(), addr net.Addr, additions ...inbound.Addition) {
|
||||
func handleSocksUDP(pc net.PacketConn, tunnel C.Tunnel, buf []byte, put func(), addr net.Addr, additions ...inbound.Addition) {
|
||||
tgtAddr := socks5.SplitAddr(buf)
|
||||
if tgtAddr == nil {
|
||||
// Unresolved UDP packet, return buffer to the pool
|
||||
@ -76,8 +76,5 @@ func handleSocksUDP(pc net.PacketConn, in chan<- C.PacketAdapter, buf []byte, pu
|
||||
payload: payload,
|
||||
put: put,
|
||||
}
|
||||
select {
|
||||
case in <- inbound.NewPacket(target, packet, C.SHADOWSOCKS, additions...):
|
||||
default:
|
||||
}
|
||||
tunnel.HandleUDPPacket(inbound.NewPacket(target, packet, C.SHADOWSOCKS, additions...))
|
||||
}
|
||||
|
Reference in New Issue
Block a user