code: func (c *streamClient) handle() (*streamParams, error) {
  	log.Infof(c, "Received new connection.")
  
  	// Close the connection as a failsafe. If we have already decoupled it, this
  	// will end up being a no-op.
  	defer c.closeConn()
  
  	// Perform our handshake. We pass the connection explicitly into this method
  	// because it can get decoupled during operation.
  	p, err := handshake(c, c.conn)
  	if err != nil {
  		return nil, err
  	}
  
  	// Successful handshake. Forward our properties.
  	return &streamParams{c.decoupleConn(), p}, nil
  }
docs: // handle initializes the supplied connection. On success, it will prepare
  // the connection as a Butler stream and pass its parameters through the
  // supplied channel.
  //
  // On failure, the connection will be closed.
  //
  // This method returns the negotiated stream parameters, or nil if the
  // negotitation failed and the client was closed.