瀏覽代碼

fix heartbeat error

fatedier 8 年之前
父節點
當前提交
30aeaf968e
共有 2 個文件被更改,包括 6 次插入1 次删除
  1. 5 1
      client/control.go
  2. 1 0
      server/control.go

+ 5 - 1
client/control.go

@@ -218,7 +218,7 @@ func (ctl *Control) reader() {
 				return
 			} else {
 				ctl.Warn("read error: %v", err)
-				continue
+				return
 			}
 		} else {
 			ctl.readCh <- m
@@ -262,10 +262,13 @@ func (ctl *Control) manager() {
 		select {
 		case <-hbSend.C:
 			// send heartbeat to server
+			ctl.Debug("send heartbeat to server")
 			ctl.sendCh <- &msg.Ping{}
 		case <-hbCheck.C:
 			if time.Since(ctl.lastPong) > time.Duration(config.ClientCommonCfg.HeartBeatTimeout)*time.Second {
 				ctl.Warn("heartbeat timeout")
+				// let reader() stop
+				ctl.conn.Close()
 				return
 			}
 		case rawMsg, ok := <-ctl.readCh:
@@ -302,6 +305,7 @@ func (ctl *Control) manager() {
 				ctl.Info("[%s] start proxy success", m.ProxyName)
 			case *msg.Pong:
 				ctl.lastPong = time.Now()
+				ctl.Debug("receive heartbeat from server")
 			}
 		}
 	}

+ 1 - 0
server/control.go

@@ -318,6 +318,7 @@ func (ctl *Control) manager() {
 				ctl.sendCh <- resp
 			case *msg.Ping:
 				ctl.lastPing = time.Now()
+				ctl.conn.Debug("receive heartbeat")
 				ctl.sendCh <- &msg.Pong{}
 			}
 		}