aboutsummaryrefslogtreecommitdiffstats
path: root/ethereum.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-01-31 08:12:48 +0800
committerobscuren <geffobscura@gmail.com>2014-01-31 08:12:48 +0800
commit36f221dbe7e66568fc3f1680208b73e4ea20c4ef (patch)
tree2b05a23d05abff8329f66431c8ead60830c245da /ethereum.go
parent7f100e96101a057cba7b2d5c58c12d2f7accf381 (diff)
downloaddexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.tar
dexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.tar.gz
dexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.tar.bz2
dexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.tar.lz
dexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.tar.xz
dexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.tar.zst
dexon-36f221dbe7e66568fc3f1680208b73e4ea20c4ef.zip
Don't connect to peers that are already connected
Diffstat (limited to 'ethereum.go')
-rw-r--r--ethereum.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/ethereum.go b/ethereum.go
index 98316cf04..dd6256f4b 100644
--- a/ethereum.go
+++ b/ethereum.go
@@ -90,6 +90,22 @@ func (s *Ethereum) ProcessPeerList(addrs []string) {
}
func (s *Ethereum) ConnectToPeer(addr string) error {
+ var alreadyConnected bool
+
+ eachPeer(s.peers, func(p *Peer, v *list.Element) {
+ phost, _, _ := net.SplitHostPort(p.conn.RemoteAddr().String())
+ ahost, _, _ := net.SplitHostPort(addr)
+
+ if phost == ahost {
+ alreadyConnected = true
+ return
+ }
+ })
+
+ if alreadyConnected {
+ return nil
+ }
+
peer := NewOutboundPeer(addr, s)
s.peers.PushBack(peer)