OSDN Git Service

Filter connected nodes
authorYahtoo Ma <yahtoo.ma@gmail.com>
Thu, 12 Apr 2018 06:24:24 +0000 (14:24 +0800)
committerYahtoo Ma <yahtoo.ma@gmail.com>
Sat, 14 Apr 2018 07:39:10 +0000 (15:39 +0800)
p2p/pex_reactor.go
p2p/switch.go

index b5c6683..3db22e3 100644 (file)
@@ -268,7 +268,7 @@ func (r *PEXReactor) ensurePeers() {
                        alreadyDialing := r.Switch.IsDialing(try)
                        var alreadyConnected bool
                        for _, v := range r.Switch.Peers().list {
-                               if strings.Compare(v.mconn.RemoteAddress.String(), try.String()) == 0 {
+                               if strings.Compare(v.mconn.RemoteAddress.IP.String(), try.IP.String()) == 0 {
                                        alreadyConnected = true
                                        break
                                }
index 462aa65..58e1857 100644 (file)
@@ -16,6 +16,7 @@ import (
        cfg "github.com/bytom/config"
        "github.com/bytom/errors"
        "github.com/bytom/p2p/trust"
+       "strings"
 )
 
 const (
@@ -362,7 +363,11 @@ func (sw *Switch) DialPeerWithAddress(addr *NetAddress, persistent bool) (*Peer,
        if err := sw.checkBannedPeer(addr.IP.String()); err != nil {
                return nil, err
        }
-
+       for _, v := range sw.Peers().list {
+               if strings.Compare(v.mconn.RemoteAddress.IP.String(), addr.IP.String()) == 0 {
+                       return nil, errors.New("Peer is connected")
+               }
+       }
        sw.dialing.Set(addr.IP.String(), addr)
        defer sw.dialing.Delete(addr.IP.String())