cmd, eth, p2p: introduce pending peer cli arg, add tests
This commit is contained in:
@ -22,9 +22,7 @@ const (
|
||||
refreshPeersInterval = 30 * time.Second
|
||||
staticPeerCheckInterval = 15 * time.Second
|
||||
|
||||
// This is the maximum number of inbound connection
|
||||
// that are allowed to linger between 'accepted' and
|
||||
// 'added as peer'.
|
||||
// Maximum number of concurrently handshaking inbound connections.
|
||||
maxAcceptConns = 10
|
||||
|
||||
// Maximum number of concurrently dialing outbound connections.
|
||||
@ -55,6 +53,11 @@ type Server struct {
|
||||
// connected. It must be greater than zero.
|
||||
MaxPeers int
|
||||
|
||||
// MaxPendingPeers is the maximum number of peers that can be pending in the
|
||||
// handshake phase, counted separately for inbound and outbound connections.
|
||||
// Zero defaults to preset values.
|
||||
MaxPendingPeers int
|
||||
|
||||
// Name sets the node name of this server.
|
||||
// Use common.MakeName to create a name that follows existing conventions.
|
||||
Name string
|
||||
@ -334,8 +337,12 @@ func (srv *Server) listenLoop() {
|
||||
// This channel acts as a semaphore limiting
|
||||
// active inbound connections that are lingering pre-handshake.
|
||||
// If all slots are taken, no further connections are accepted.
|
||||
slots := make(chan struct{}, maxAcceptConns)
|
||||
for i := 0; i < maxAcceptConns; i++ {
|
||||
tokens := maxAcceptConns
|
||||
if srv.MaxPendingPeers > 0 {
|
||||
tokens = srv.MaxPendingPeers
|
||||
}
|
||||
slots := make(chan struct{}, tokens)
|
||||
for i := 0; i < tokens; i++ {
|
||||
slots <- struct{}{}
|
||||
}
|
||||
|
||||
@ -405,8 +412,12 @@ func (srv *Server) dialLoop() {
|
||||
defer refresh.Stop()
|
||||
|
||||
// Limit the number of concurrent dials
|
||||
slots := make(chan struct{}, maxDialingConns)
|
||||
for i := 0; i < maxDialingConns; i++ {
|
||||
tokens := maxAcceptConns
|
||||
if srv.MaxPendingPeers > 0 {
|
||||
tokens = srv.MaxPendingPeers
|
||||
}
|
||||
slots := make(chan struct{}, tokens)
|
||||
for i := 0; i < tokens; i++ {
|
||||
slots <- struct{}{}
|
||||
}
|
||||
dial := func(dest *discover.Node) {
|
||||
|
Reference in New Issue
Block a user