code: def _connect(self):
          
          while self.protocol:
              _LOGGER.info('Trying to connect to %s', self.server_address)
              try:
                  sock = socket.create_connection(
                      self.server_address, self.reconnect_timeout)
              except socket.timeout:
                  _LOGGER.error(
                      'Connecting to socket timed out for %s',
                      self.server_address)
                  _LOGGER.info(
                      'Waiting %s secs before trying to connect again',
                      self.reconnect_timeout)
                  time.sleep(self.reconnect_timeout)
              except OSError:
                  _LOGGER.error(
                      'Failed to connect to socket at %s', self.server_address)
                  _LOGGER.info(
                      'Waiting %s secs before trying to connect again',
                      self.reconnect_timeout)
                  time.sleep(self.reconnect_timeout)
              else:
                  self.tcp_check_timer = time.time()
                  self.tcp_disconnect_timer = time.time()
                  transport = TCPTransport(
                      sock, lambda: self.protocol, self._check_connection)
                  poll_thread = threading.Thread(target=self._poll_queue)
                  self._stop_event.clear()
                  poll_thread.start()
                  transport.start()
                  transport.connect()
                  return
docs: Connect to socket. This should be run in a new thread.