code: def connect(self, their_unl, events, force_master=1, hairpin=1,
                  nonce="0" * 64):
          
          parms = (their_unl, events, force_master, hairpin, nonce)
          t = Thread(target=self.connect_handler, args=parms)
          t.start()
          self.unl_threads.append(t)
docs: A new thread is spawned because many of the connection techniques
          rely on sleep to determine connection outcome or to synchronise hole
          punching techniques. If the sleep is in its own thread it won't
          block main execution.