Browse Source

listening完毕

skyfffire 2 năm trước cách đây
mục cha
commit
18314f762f
1 tập tin đã thay đổi với 19 bổ sung2 xóa
  1. 19 2
      p2p/server.go

+ 19 - 2
p2p/server.go

@@ -1,7 +1,10 @@
 package p2p
 
 import (
+	"blockchain-go/common/gopool"
 	"blockchain-go/p2p/enode"
+	"blockchain-go/p2p/enr"
+	"blockchain-go/p2p/nat"
 	"errors"
 	"github.com/ethereum/go-ethereum/crypto"
 	"net"
@@ -28,7 +31,7 @@ type Server struct {
 
 	listener     net.Listener
 	ourHandshake *protoHandshake
-	//loopWG sync.WaitGroup // loop, listenLoop
+	loopWG       sync.WaitGroup // loop, listenLoop
 	//peerFeed event.Feed
 	//log log.Logger
 
@@ -40,7 +43,7 @@ type Server struct {
 	//dialsched *dialScheduler
 
 	// Channels into the run loop.
-	//quit          chan struct{}
+	quit chan struct{}
 	//addtrusted    chan *enode.Node
 	//removetrusted chan *enode.Node
 	//peerOp                  chan peerOpFunc
@@ -96,6 +99,20 @@ func (server *Server) setupListening() (err error) {
 	server.listener = listener
 	server.ListenAddr = listener.Addr().String()
 
+	if tcp, ok := listener.Addr().(*net.TCPAddr); ok {
+		server.localnode.Set(enr.TCP(tcp.Port))
+
+		if !tcp.IP.IsLoopback() && server.NAT != nil {
+			server.loopWG.Add(1)
+
+			gopool.Submit(func() {
+				nat.Map(server.NAT, server.quit, "tcp", tcp.Port, tcp.Port, "ethereum p2p")
+
+				server.loopWG.Done()
+			})
+		}
+	}
+
 	return nil
 }