code: func (dht *DHT) Run() {
  	dht.init()
  	dht.listen()
  	dht.join()
  
  	dht.Ready = true
  
  	var pkt packet
  	tick := time.Tick(dht.CheckKBucketPeriod)
  
  	for {
  		select {
  		case pkt = <-dht.packets:
  			handle(dht, pkt)
  		case <-tick:
  			if dht.routingTable.Len() == 0 {
  				dht.join()
  			} else if dht.transactionManager.len() == 0 {
  				go dht.routingTable.Fresh()
  			}
  		}
  	}
  }
docs: // Run starts the dht.