docs: def __start_connection(self, context, node, ccallbacks=None):
          """Start a new connection, and manage it from a new greenlet."""
  
          _logger.debug("Creating connection object: CONTEXT=[%s] NODE=[%s]", 
                        context, node)
  
          c = nsq.connection.Connection(
                  context,
                  node, 
                  self.__identify, 
                  self.__message_handler,
                  self.__quit_ev,
                  ccallbacks,
                  ignore_quit=self.__connection_ignore_quit)
  
          g = gevent.spawn(c.run)
  
          # Now, wait for the thread to finish the connection.
  
          timeout_s = nsq.config.client.NEW_CONNECTION_NEGOTIATE_TIMEOUT_S
          if c.connected_ev.wait(timeout_s) is False:
              _logger.error("New connection to server [%s] timed-out. Cleaning-"
                            "up thread.", node)
  
              g.kill()
              g.join()
  
              # We'll try again on the next audit.
  
              raise EnvironmentError("Connection to server [%s] failed." % 
                                     (node,))
  
          self.__connections.append((node, c, g))