MEMCACHED_SERVER_CURSOR(3)
β¨ MEMCACHED_SERVER_CURSOR β¨
okay bestie, buckle up π this is the libmemcached-awesome page for memcached_server_cursor(3) β aka the libmemcached documentation on how to wrangle your server list. it's giving "many hands make light work" but the hands are callbacks π«Ά
π SYNOPSIS π
first things first, you gotta pull in the header and link the library, no cap:
#include <libmemcached/memcached.h>
and compile + link with -lmemcached β don't forget it or nothing works and you'll be sad π
okay so here's every single function on this page, one by one, zero skips, periodt π
memcached_server_count
uint32_t memcached_server_count(memcached_st *ptr)
Parameters
ptrβ pointer to initializedmemcached_ststruct
Returns
number of configured servers β¨
memcached_server_add
memcached_return_t memcached_server_add(memcached_st *ptr, const char *hostname, in_port_t port)
Parameters
ptrβ pointer to initializedmemcached_ststructhostnameβ hostname or IP address of the TCP server to addportβ port of the TCP server
Returns
memcached_return_t indicating success π
memcached_server_add_udp
memcached_return_t memcached_server_add_udp(memcached_st *ptr, const char *hostname, in_port_t port)
Parameters
ptrβ pointer to initializedmemcached_ststructhostnameβ hostname or IP address of the UDP server to addportβ port of the UDP server
Returns
memcached_return_t indicating success β¨
memcached_server_add_unix_socket
memcached_return_t memcached_server_add_unix_socket(memcached_st *ptr, const char *socket)
Parameters
ptrβ pointer to initializedmemcached_ststructsocketβ path to the UNIX socket of the server to add
Returns
memcached_return_t indicating success π
memcached_server_push
memcached_return_t memcached_server_push(memcached_st *ptr, const memcached_server_st *list)
Parameters
ptrβ pointer to initializedmemcached_ststructlistβ pre-configured list of servers to push
Returns
memcached_return_t indicating success π¦
memcached_server_by_key
const memcached_instance_st *memcached_server_by_key(memcached_st *ptr, const char *key, size_t key_length, memcached_return_t *error)
Parameters
ptrβ pointer to initializedmemcached_ststructkeyβ key to hash and lookup a serverkey_lengthβ length of key without any terminating zeroerrorβ pointer tomemcached_return_tindicating success
Returns
the server instance to be used for storing/retrieving key π₯
memcached_server_get_last_disconnect
const memcached_instance_st *memcached_server_get_last_disconnect(const memcached_st *ptr)
Parameters
ptrβ pointer to initializedmemcached_ststruct
Returns
the instance of the last server for which there was a connection problem π
memcached_server_cursor (the main character π)
memcached_return_t memcached_server_cursor(const memcached_st *ptr, const memcached_server_fn *callback, void *context, uint32_t number_of_callbacks)
Parameters
ptrβ pointer to initializedmemcached_ststructcallbackβ list ofmemcached_server_fnto be called for each server instancecontextβ pointer to user supplied context for the callbacknumber_of_callbacksβ number of callbacks supplied
Returns
memcached_return_t indicating success πΈ
the callback type itself
typedef memcached_return_t (*memcached_server_fn)(const memcached_st *ptr, const memcached_instance_st *server, void *context)
Param ptr
pointer to the memcached_st struct
Param server
pointer to memcached_instance_st
Param context
pointer to user supplied context
Returns
memcached_return_t indicating success π
π DESCRIPTION π
ngl, libmemcached does its thing on a list of hosts, and the order of those hosts is literally what determines routing to keys. iconic. functions are provided so you can add keys to memcached_st structures. and if you wanna manipulate lists of servers, go look at memcached_server_st π
memcached_server_count() hands you a count of how many servers your memcached_st structure is currently using. simple, slay.
memcached_server_add() pushes a single TCP server into the memcached_st structure. this server goes at the end. duplicate servers are allowed, so duplication is not checked β the library is not your mom, bestie π but here's the tea: if you execute this function with the MEMCACHED_BEHAVIOR_USE_UDP behavior set, you get a MEMCACHED_INVALID_HOST_PROTOCOL. not the vibe.
memcached_server_add_udp() pushes a single UDP server into the memcached_st structure. also placed at the end, also no duplicate checking because duplicates are allowed. and the flip side of the above: executing this one without setting the MEMCACHED_BEHAVIOR_USE_UDP behavior will result in a MEMCACHED_INVALID_HOST_PROTOCOL. symmetry, we love her π
memcached_server_add_unix_socket() pushes a single UNIX socket into the memcached_st structure. yep, at the end. yep, duplicates allowed, not checked. β οΈ but heads up: the length of the filename must be one character less than MEMCACHED_MAX_HOST_LENGTH β that's a hard limit, no negotiating.
memcached_server_push() pushes an array of memcached_server_st into the memcached_st structure. these servers get placed at the end too, duplicates allowed, not checked. and a copy is made of the structure, so the list you provided β and any operations you do on that list β are not saved π«Ά your list stays yours.
memcached_server_by_key() lets you hand over a key and get back the server that would be used for assignment. lowkey handy.
memcached_server_get_last_disconnect() returns a pointer to the last server for which there was a connection problem. > important nuance, bestie: it does not mean this particular server is currently dead. but if the library is reporting that a server is dead, the returned server is a very good candidate π so like, strong suspect energy.
memcached_server_cursor() takes a memcached_st and loops through the list of hosts currently in the cursor, calling the list of callback functions provided. you can optionally pass in a value via context which gets provided to each callback function. and if any callback returns an error, the loop terminates β one bad callback ends the whole party π also: memcached_server_cursor() is passed the original caller memcached_st in its current state.
π« RETURN VALUE π«
varies, see particular functions. (yes that's really it, each function above told you its own deal π)
π¦ SEE ALSO π¦
that's the whole page, fr fr π you now know everything about server cursors and adding servers and not being weird about duplicates. go forth and route those keys, main character π
this was the libmemcached-awesome glow-up of the page, version 1.1, dated Jul 24, 2025 β tysm for reading, ily, bye bestie ππΈ
π¦ where this page comes from
- fedora 43: libmemcached-awesome-devel 1.1.4-7.fc43 Β· BSD-3-Clause
- fedora 43: libmemcached-awesome-devel 1.1.4-7.fc43 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms