code: def connect_async(self, host, port=1883, keepalive=60, bind_address=""):
          
          if host is None or len(host) == 0:
              raise ValueError('Invalid host.')
          if port <= 0:
              raise ValueError('Invalid port number.')
          if keepalive < 0:
              raise ValueError('Keepalive must be >=0.')
          if bind_address != "" and bind_address is not None:
              if (sys.version_info[0] == 2 and sys.version_info[1] < 7) or (sys.version_info[0] == 3 and sys.version_info[1] < 2):
                  raise ValueError('bind_address requires Python 2.7 or 3.2.')
  
          self._host = host
          self._port = port
          self._keepalive = keepalive
          self._bind_address = bind_address
  
          self._state_mutex.acquire()
          self._state = mqtt_cs_connect_async
          self._state_mutex.release()
docs: Connect to a remote broker asynchronously. This is a non-blocking
          connect call that can be used with loop_start() to provide very quick
          start.
  
          host is the hostname or IP address of the remote broker.
          port is the network port of the server host to connect to. Defaults to
          1883. Note that the default port for MQTT over SSL/TLS is 8883 so if you
          are using tls_set() the port may need providing.
          keepalive: Maximum period in seconds between communications with the
          broker. If no other messages are being exchanged, this controls the
          rate at which the client will send ping messages to the broker.