code: func (cm *ConnManager) Start() {
  	// Already started?
  	if atomic.AddInt32(&cm.start, 1) != 1 {
  		return
  	}
  
  	log.Trace("Connection manager started")
  	cm.wg.Add(1)
  	go cm.connHandler()
  
  	// Start all the listeners so long as the caller requested them and
  	// provided a callback to be invoked when connections are accepted.
  	if cm.cfg.OnAccept != nil {
  		for _, listner := range cm.cfg.Listeners {
  			cm.wg.Add(1)
  			go cm.listenHandler(listner)
  		}
  	}
  
  	for i := atomic.LoadUint64(&cm.connReqCount); i < uint64(cm.cfg.TargetOutbound); i++ {
  		go cm.NewConnReq()
  	}
  }
docs: // Start launches the connection manager and begins connecting to the network.