From 6eb855ee9ae0aa130bf0ed07a02479359ce14211 Mon Sep 17 00:00:00 2001 From: "dmy@lab" Date: Fri, 13 Nov 2015 15:56:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8B=A8=E5=8F=B7=E9=87=8D?= =?UTF-8?q?=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tcp.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tcp.go b/tcp.go index b572a27..847d18b 100644 --- a/tcp.go +++ b/tcp.go @@ -1,6 +1,8 @@ package main import ( + "errors" + "fmt" "github.com/TransX/log" "net" "os" @@ -16,14 +18,24 @@ func NewTransTCP() *TransTCP { func (this *TransTCP) createTCPClient(ip, port string) (conn net.Conn, err error) { conn, err = net.Dial("tcp4", ip+":"+port) - if err == nil { - - } else { + if err != nil { conn = nil } return } +func (this *TransTCP) createTCPClientWithRetry(ip, port string, retry int) (conn net.Conn, err error) { + for i := 0; i < retry; i++ { + c, e := this.createTCPClient(ip, port) + if e == nil { + return c, e + } + log.Error("Create Client Error: %s", e.Error()) + } + //failed with retry + return nil, errors.New(fmt.Sprintln("failed to create client after %d retry", retry)) +} + func (this *TransTCP) createTCPListener(ip, port string) (listen net.Listener, err error) { listener, _err := net.Listen("tcp4", ip+":"+port) if _err == nil { @@ -48,7 +60,7 @@ func (this *TransTCP) Start(listenPort, destIP, destPort string, clientOrServer go func() { log.Info("Incoming %s", listenerConn.RemoteAddr().String()) //创建到目标的连接 - destConn, err := this.createTCPClient(destIP, destPort) + destConn, err := this.createTCPClientWithRetry(destIP, destPort, 3) if err != nil { log.Panic("Failed to connect to destination. %s", err) os.Exit(0)