libmemcached - проверка подключения - PullRequest
0 голосов
/ 16 февраля 2012

Есть ли простой способ проверить, успешно ли данный memcached_st* подключен к серверу memcached?

Я подключаюсь через memcached_server_add_with_weight, и он возвращает MEMCACHED_SUCCESS, когда я даю ложныйимена хостов.Аналогично, вызов memcached_last_error_errno сразу после вызова на memcached_server_add_with_weight дает мне MEMCACHED_SUCCESS.

1 Ответ

0 голосов
/ 30 сентября 2012

Один из интересных способов сделать это - проверить фактический дескриптор сокета.Если libmemcached успешно подключен к серверу, дескриптор сокета является положительным, в противном случае он равен -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);
...