MCPcopy Create free account
hub / github.com/cppla/moto / HandleNormal

Function HandleNormal

controller/normal.go:14–55  ·  view source on GitHub ↗

HandleNormal 会依次尝试各个目标,并在成功的连接上挂载自适应的单边加速。

(conn net.Conn, rule *config.Rule)

Source from the content-addressed store, hash-verified

12
13// HandleNormal 会依次尝试各个目标,并在成功的连接上挂载自适应的单边加速。
14func HandleNormal(conn net.Conn, rule *config.Rule) {
15 defer conn.Close()
16
17 var target net.Conn
18 //正常模式下挨个连接直到成功连接
19 for _, v := range rule.Targets {
20 c, err := outboundDial(v.Address)
21 if err != nil {
22 utils.Logger.Error("无法建立连接,尝试下一个目标",
23 zap.String("ruleName", rule.Name),
24 zap.String("remoteAddr", conn.RemoteAddr().String()),
25 zap.String("targetAddr", v.Address))
26 continue
27 }
28 if tc, ok := c.(*net.TCPConn); ok {
29 _ = tc.SetNoDelay(true)
30 _ = tc.SetKeepAlive(true)
31 _ = tc.SetKeepAlivePeriod(30 * time.Second)
32 }
33 target = c
34 break
35 }
36 if target == nil {
37 utils.Logger.Error("所有目标均连接失败,无法处理连接",
38 zap.String("ruleName", rule.Name),
39 zap.String("remoteAddr", conn.RemoteAddr().String()))
40 return
41 }
42 utils.Logger.Debug("建立连接",
43 zap.String("ruleName", rule.Name),
44 zap.String("remoteAddr", conn.RemoteAddr().String()),
45 zap.String("targetAddr", target.RemoteAddr().String()))
46
47 defer target.Close()
48
49 go func() {
50 io.Copy(conn, target)
51 conn.Close()
52 target.Close()
53 }()
54 io.Copy(target, conn)
55}

Callers 1

ListenFunction · 0.85

Calls 1

outboundDialFunction · 0.85

Tested by

no test coverage detected