|
|
@@ -690,50 +690,56 @@ func (h *Hub) ConnectToServer(remoteChannel string, force bool, host *conn.HostI
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var conn conn.Connect
|
|
|
- // var rawProto string
|
|
|
- // addr := net.JoinHostPort(host.Host, strconv.Itoa(int(host.Port)))
|
|
|
-
|
|
|
- // 添加定时器
|
|
|
- ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(h.cf.ConnectTimeout))
|
|
|
- defer cancel()
|
|
|
- taskCh := make(chan bool)
|
|
|
- done := false // 指示是否已经完成
|
|
|
-
|
|
|
- // 发送连接请求
|
|
|
- go func() {
|
|
|
- conn, err = Dail(host, h.cf)
|
|
|
- if done {
|
|
|
- if err != nil {
|
|
|
- log.Println("[ConnectToServer] dial failed:", err)
|
|
|
- }
|
|
|
- if conn != nil {
|
|
|
- conn.Close()
|
|
|
- }
|
|
|
- } else {
|
|
|
- taskCh <- err == nil
|
|
|
- }
|
|
|
- }()
|
|
|
-
|
|
|
- select {
|
|
|
- case ok := <-taskCh:
|
|
|
- cancel()
|
|
|
- if !ok || err != nil || conn == nil {
|
|
|
- log.Println("[ConnectToServer] connect failed:", err)
|
|
|
- host.Errors++
|
|
|
- host.Updated = time.Now()
|
|
|
- if err == nil {
|
|
|
- err = errors.New("unknown error")
|
|
|
- }
|
|
|
- return err
|
|
|
- }
|
|
|
- case <-ctx.Done():
|
|
|
- done = true
|
|
|
- return errors.New("timeout")
|
|
|
- case <-h.ctx.Done():
|
|
|
- return errors.New("quit")
|
|
|
+ conn, err := DailWithTimeout(h.ctx, host, h.cf)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("[DailWithTimeout] error:", err)
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
+ // var conn conn.Connect
|
|
|
+ // // var rawProto string
|
|
|
+ // // addr := net.JoinHostPort(host.Host, strconv.Itoa(int(host.Port)))
|
|
|
+
|
|
|
+ // // 添加定时器
|
|
|
+ // ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(h.cf.ConnectTimeout))
|
|
|
+ // defer cancel()
|
|
|
+ // taskCh := make(chan bool)
|
|
|
+ // done := false // 指示是否已经完成
|
|
|
+
|
|
|
+ // // 发送连接请求
|
|
|
+ // go func() {
|
|
|
+ // conn, err = Dail(host, h.cf)
|
|
|
+ // if done {
|
|
|
+ // if err != nil {
|
|
|
+ // log.Println("[ConnectToServer] dial failed:", err)
|
|
|
+ // }
|
|
|
+ // if conn != nil {
|
|
|
+ // conn.Close()
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // taskCh <- err == nil
|
|
|
+ // }
|
|
|
+ // }()
|
|
|
+
|
|
|
+ // select {
|
|
|
+ // case ok := <-taskCh:
|
|
|
+ // cancel()
|
|
|
+ // if !ok || err != nil || conn == nil {
|
|
|
+ // log.Println("[ConnectToServer] connect failed:", err)
|
|
|
+ // host.Errors++
|
|
|
+ // host.Updated = time.Now()
|
|
|
+ // if err == nil {
|
|
|
+ // err = errors.New("unknown error")
|
|
|
+ // }
|
|
|
+ // return err
|
|
|
+ // }
|
|
|
+ // case <-ctx.Done():
|
|
|
+ // done = true
|
|
|
+ // return errors.New("timeout")
|
|
|
+ // case <-h.ctx.Done():
|
|
|
+ // return errors.New("quit")
|
|
|
+ // }
|
|
|
+
|
|
|
// 如果 host 是代理,将代理信息添加到channel中
|
|
|
// localChannel := h.channel
|
|
|
// if host.Proxy {
|
|
|
@@ -751,7 +757,7 @@ func (h *Hub) ConnectToServer(remoteChannel string, force bool, host *conn.HostI
|
|
|
}
|
|
|
|
|
|
// 将连接加入现有连接中
|
|
|
- done = false
|
|
|
+ done := false
|
|
|
h.lines.Range(func(id int, line *Line) bool {
|
|
|
if line.channel == remoteChannel {
|
|
|
if line.state == StateConnected {
|