|
@@ -14,8 +14,11 @@ import (
|
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
|
"github.com/ethereum/go-ethereum/p2p/netutil"
|
|
"github.com/ethereum/go-ethereum/p2p/netutil"
|
|
|
"net"
|
|
"net"
|
|
|
|
|
+ "os"
|
|
|
|
|
+ "os/signal"
|
|
|
"sort"
|
|
"sort"
|
|
|
"sync"
|
|
"sync"
|
|
|
|
|
+ "syscall"
|
|
|
"time"
|
|
"time"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -55,11 +58,15 @@ type Server struct {
|
|
|
//delpeer chan peerDrop
|
|
//delpeer chan peerDrop
|
|
|
checkpointPostHandshake chan *conn
|
|
checkpointPostHandshake chan *conn
|
|
|
checkpointAddPeer chan *conn
|
|
checkpointAddPeer chan *conn
|
|
|
|
|
+ sigs chan os.Signal
|
|
|
|
|
|
|
|
//inboundHistory expHeap
|
|
//inboundHistory expHeap
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (server *Server) Start() (err error) {
|
|
func (server *Server) Start() (err error) {
|
|
|
|
|
+ server.sigs = make(chan os.Signal, 1)
|
|
|
|
|
+ signal.Notify(server.sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
|
+
|
|
|
server.quit = make(chan struct{})
|
|
server.quit = make(chan struct{})
|
|
|
server.checkpointPostHandshake = make(chan *conn)
|
|
server.checkpointPostHandshake = make(chan *conn)
|
|
|
server.checkpointAddPeer = make(chan *conn)
|
|
server.checkpointAddPeer = make(chan *conn)
|
|
@@ -93,18 +100,25 @@ func (server *Server) Start() (err error) {
|
|
|
server.setupDialScheduler()
|
|
server.setupDialScheduler()
|
|
|
|
|
|
|
|
// server核心运行
|
|
// server核心运行
|
|
|
|
|
+ go server.StopListener()
|
|
|
server.run()
|
|
server.run()
|
|
|
|
|
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (server *Server) StopListener() {
|
|
|
|
|
+ <-server.sigs
|
|
|
|
|
+
|
|
|
|
|
+ close(server.quit)
|
|
|
|
|
+ server.loopWG.Done()
|
|
|
|
|
+ server.discmix.Close()
|
|
|
|
|
+ server.dialsched.stop()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (server *Server) run() {
|
|
func (server *Server) run() {
|
|
|
server.loopWG.Add(1)
|
|
server.loopWG.Add(1)
|
|
|
|
|
|
|
|
fmt.Printf("Started P2P networking, self: %v.\n", server.localnode.Node().URLv4())
|
|
fmt.Printf("Started P2P networking, self: %v.\n", server.localnode.Node().URLv4())
|
|
|
- defer server.loopWG.Done()
|
|
|
|
|
- defer server.discmix.Close()
|
|
|
|
|
- defer server.dialsched.stop()
|
|
|
|
|
|
|
|
|
|
//var (
|
|
//var (
|
|
|
// peers = make(map[enode.ID]*Peer)
|
|
// peers = make(map[enode.ID]*Peer)
|