0

Is there an easy way to check if a given memcached_st* is successfully connected to a memcached server?

I'm connecting via memcached_server_add_with_weight, and it's returning MEMCACHED_SUCCESS when I give it spurious hostnames. Similarly, calling memcached_last_error_errno immediately after the call to memcached_server_add_with_weight gives me MEMCACHED_SUCCESS.

Dominic Rodger
  • 97,747
  • 36
  • 197
  • 212

1 Answers1

0

One interesting way to do this is checking the actual socket descriptor. If libmemcached successfully connected to the server then the socket descriptor is positive, otherwise it is -1.

std::shared_ptr<memcached_st> es (memcached_create (NULL), [](memcached_st* msp) {memcached_free (msp);});
memcached_server_add_with_weight (es.get(), "server1", 9201, 100);
memcached_server_add (es.get(), "server2", 9201);
memcached_server_add (es.get(), "server3", 9201);
memcached_server_fn serverVisitor = [](const memcached_st *ptr, memcached_server_instance_st server, void *context) {
  if (server->fd < 0) throw std::runtime_error (std::string ("libmemcached connection to ") + server->hostname + " failed!");
  return MEMCACHED_SUCCESS;
};
memcached_server_cursor (es.get(), &serverVisitor, NULL, 1);
ArtemGr
  • 11,684
  • 3
  • 52
  • 85