From d5913fc77b562d111d4d1338291b3214df4d61a1 Mon Sep 17 00:00:00 2001
From: fatedier <fatedier@gmail.com>
Date: Thu, 7 Apr 2016 19:27:39 +0800
Subject: [PATCH] all: fix bug when reconnecting

---
 src/frp/cmd/frpc/control.go | 6 +++++-
 src/frp/cmd/frps/control.go | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/frp/cmd/frpc/control.go b/src/frp/cmd/frpc/control.go
index 06a4fdae..d1f4fdbf 100644
--- a/src/frp/cmd/frpc/control.go
+++ b/src/frp/cmd/frpc/control.go
@@ -72,7 +72,10 @@ func msgReader(cli *client.ProxyClient, c *conn.Conn, msgSendChan chan interface
 				log.Info("ProxyName [%s], try to reconnect to frps [%s:%d]...", cli.Name, client.ServerAddr, client.ServerPort)
 				c, err = loginToServer(cli)
 				if err == nil {
+					close(msgSendChan)
+					msgSendChan = make(chan interface{}, 1024)
 					go heartbeatSender(c, msgSendChan)
+					go msgSender(cli, c, msgSendChan)
 					break
 				}
 
@@ -81,6 +84,7 @@ func msgReader(cli *client.ProxyClient, c *conn.Conn, msgSendChan chan interface
 				}
 				time.Sleep(delayTime * time.Second)
 			}
+			continue
 		} else if err != nil {
 			log.Warn("ProxyName [%s], read from frps error: %v", cli.Name, err)
 			continue
@@ -117,7 +121,7 @@ func msgSender(cli *client.ProxyClient, c *conn.Conn, msgSendChan chan interface
 		buf, _ := json.Marshal(msg)
 		err := c.Write(string(buf) + "\n")
 		if err != nil {
-			log.Warn("ProxyName [%s], write to client error, proxy exit", cli.Name)
+			log.Warn("ProxyName [%s], write to server error, proxy exit", cli.Name)
 			c.Close()
 			break
 		}
diff --git a/src/frp/cmd/frps/control.go b/src/frp/cmd/frps/control.go
index 67cd6428..6566cd73 100644
--- a/src/frp/cmd/frps/control.go
+++ b/src/frp/cmd/frps/control.go
@@ -158,7 +158,7 @@ func msgReader(s *server.ProxyServer, c *conn.Conn, msgSendChan chan interface{}
 		case consts.HeartbeatReq:
 			log.Debug("ProxyName [%s], get heartbeat", s.Name)
 			timer.Reset(time.Duration(server.HeartBeatTimeout) * time.Second)
-			heartbeatRes := msg.ControlRes{
+			heartbeatRes := &msg.ControlRes{
 				Type: consts.HeartbeatRes,
 			}
 			msgSendChan <- heartbeatRes