# Working with memcached pools

## SYNOPSIS

#include <libmemcachedutil-1.0/pool.h>

  Compile and link with -lmemcachedutil -lmemcached

typedef struct memcached_pool_st memcached_pool_st

memcached_pool_st *memcached_pool(const char *option_string, size_t option_string_length)
  Parameters:

    - option_string -- configuration string

    - option_string_length -- length of `options_string` without any trailing zero byte

  Returns:

    allocated and initialized `memcached_pool_st` instance on success or nullptr on failure

memcached_st *memcached_pool_destroy(memcached_pool_st *pool)
  Parameters:

    pool -- initialized `memcached_pool_st` instance to free

  Returns:

    pointer to the 'master' `memcached_st` instance by legacy

memcached_st *memcached_pool_fetch(memcached_pool_st *pool, struct timespec *relative_time, memcached_return_t *rc)

  Added in version 0.53: Synonym for memcached_pool_pop

  Parameters:

    - pool -- initialized `memcached_pool_st` instance

    - relative_time -- time to block thread and wait for a connection to become available when pool size is exceeded, unless nullptr

    - rc -- out pointer to `memcached_return_t`

  Returns:

    pointer to an available `memcached_st` instance

memcached_return_t memcached_pool_release(memcached_pool_st *pool, memcached_st *mmc)

  Added in version 0.53: Synonym for memcached_pool_push.

  Parameters:

    - pool -- initialized `memcached_pool_st` instance

    - mmc -- the `memcached_st` instance to return to the pool

  Returns:

    `memcached_return_t` indicating success

memcached_return_t memcached_pool_behavior_set(memcached_pool_st *pool, memcached_behavior_t flag, uint64_t data)
  Parameters:

    - pool -- initialized `memcached_pool_st` instance

    - flag -- the behavior to change

    - value -- the value to set for `flag`

  Returns:

    `memcached_return_t` indicating success

memcached_return_t memcached_pool_behavior_get(memcached_pool_st *pool, memcached_behavior_t flag, uint64_t *value)
  Parameters:

    - pool -- initialized `memcached_pool_st` instance

    - flag -- the behavior to read

    - value -- out pointer to receive the set value of `flag`

  Returns:

    `memcached_return_t` indicating success

memcached_pool_st *memcached_pool_create(memcached_st *mmc, int initial, int max)

  Deprecated since version 0.46: Use `memcached_pool()`

memcached_st *memcached_pool_pop(memcached_pool_st *pool, bool block, memcached_return_t *rc)

  Deprecated since version 0.53: Use `memcached_pool_fetch()`

memcached_return_t memcached_pool_push(memcached_pool_st *pool, memcached_st *mmc)

  Deprecated since version 0.53: Use `memcached_pool_release()`

## DESCRIPTION

`memcached_pool()` is used to create a connection pool of objects you may use to remove the overhead of using memcached_clone for short lived `memcached_st` objects. Please see libmemcached Configuration for details on the format of the configuration string.

`memcached_pool_destroy()` is used to destroy the connection pool created with `memcached_pool_create()` and release all allocated resources. It will return the pointer to the `memcached_st` structure passed as an argument to `memcached_pool_create()`, and returns the ownership of the pointer to the caller when created with `memcached_pool_create()`, otherwise NULL is returned..

`memcached_pool_fetch()` is used to fetch a connection structure from the connection pool. The relative_time argument specifies if the function should block and wait for a connection structure to be available if we try to exceed the maximum size. You need to specify time in relative time.

`memcached_pool_release()` is used to return a connection structure back to the pool.

`memcached_pool_behavior_get()` and `memcached_pool_behavior_set()` is used to get/set behavior flags on all connections in the pool.

Both `memcached_pool_release()` and `memcached_pool_fetch()` are thread safe.

## RETURN VALUE

`memcached_pool_destroy()` returns the pointer (and ownership) to the `memcached_st` structure used to create the pool. If connections are in use it returns NULL.

`memcached_pool_pop()` returns a pointer to a `memcached_st` structure from the pool (or NULL if an allocation cannot be satisfied).

`memcached_pool_release()` returns `MEMCACHED_SUCCESS` upon success.

`memcached_pool_behavior_get()` and `memcached_pool_behavior_get()` return `MEMCACHED_SUCCESS` upon success.

`memcached_pool_fetch()` may return `MEMCACHED_TIMEOUT` if a timeout occurs while waiting for a free `memcached_st` instance, `MEMCACHED_NOTFOUND` if no `memcached_st` instance was available, respectively.

Note

If any method returns `MEMCACHED_IN_PROGRESS` then a lock on the pool could not be obtained.

If any of the parameters passed to any of these functions is invalid, `MEMCACHED_INVALID_ARGUMENTS` will be returned.

## SEE ALSO

- memcached(1)

- C/C++ Client Library for memcached

- libmemcached Configuration

- Converting Error Codes to Messages