Adding support for libmemcached_ping().
authorBrian Aker <brian@gaz>
Fri, 11 Jun 2010 01:59:25 +0000 (18:59 -0700)
committerBrian Aker <brian@gaz>
Fri, 11 Jun 2010 01:59:25 +0000 (18:59 -0700)
libmemcached/util.h [new file with mode: 0644]
libmemcached/util/ping.c [new file with mode: 0644]
libmemcached/util/ping.h [new file with mode: 0644]
tests/server.c

diff --git a/libmemcached/util.h b/libmemcached/util.h
new file mode 100644 (file)
index 0000000..5e1d4f3
--- /dev/null
@@ -0,0 +1,20 @@
+/* LibMemcached
+ * Copyright (C) 2006-2009 Brian Aker
+ * All rights reserved.
+ *
+ * Use and distribution licensed under the BSD license.  See
+ * the COPYING file in the parent directory for full text.
+ *
+ * Summary: Connection pool library.
+ *
+ * Author: Trond Norbye, Brian Aker
+ *
+ */
+
+
+#ifndef __LIBMEMCACHED__UTIL_H__
+#define __LIBMEMCACHED__UTIL_H__
+
+#include <libmemcached/memcached_util.h>
+
+#endif /* __LIBMEMCACHED__UTIL_H__ */
diff --git a/libmemcached/util/ping.c b/libmemcached/util/ping.c
new file mode 100644 (file)
index 0000000..001cd59
--- /dev/null
@@ -0,0 +1,38 @@
+/* LibMemcached
+ * Copyright (C) 2010 Brian Aker
+ * All rights reserved.
+ *
+ * Use and distribution licensed under the BSD license.  See
+ * the COPYING file in the parent directory for full text.
+ *
+ * Summary: connects to a host, and makes sure it is alive.
+ *
+ */
+
+#include "libmemcached/common.h"
+#include "libmemcached/memcached_util.h"
+
+
+bool libmemcached_ping(const char *hostname, in_port_t port, memcached_return_t *ret)
+{
+  memcached_return_t rc;
+  memcached_st memc, *memc_ptr;
+
+  memc_ptr= memcached_create(&memc);
+
+  rc= memcached_server_add(memc_ptr, hostname, port);
+
+  if (rc == MEMCACHED_SUCCESS)
+  {
+    rc= memcached_version(memc_ptr);
+  }
+
+  memcached_free(memc_ptr);
+
+  if (ret)
+  {
+    *ret= rc;
+  }
+
+  return rc == MEMCACHED_SUCCESS;
+}
diff --git a/libmemcached/util/ping.h b/libmemcached/util/ping.h
new file mode 100644 (file)
index 0000000..4ac677a
--- /dev/null
@@ -0,0 +1,26 @@
+/* LibMemcached
+ * Copyright (C) 2010 Brian Aker
+ * All rights reserved.
+ *
+ * Use and distribution licensed under the BSD license.  See
+ * the COPYING file in the parent directory for full text.
+ *
+ * Summary: connects to a host, and makes sure it is alive.
+ *
+ */
+
+#ifndef __LIBMEMCACHED_PING_H__
+#define __LIBMEMCACHED_PING_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+LIBMEMCACHED_API
+bool libmemcached_ping(const char *hostname, in_port_t port, memcached_return_t *ret);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LIBMEMCACHED_PING_H__ */
index c96f5972dbda3a5c2b2e32df8ea43bed999e0fd9..7c2b91c6fe7e2cef9d865a172d53f08116ba9e31 100644 (file)
@@ -24,6 +24,7 @@
 #include <assert.h>
 #include <signal.h>
 #include <libmemcached/memcached.h>
+#include <libmemcached/util.h>
 #include <unistd.h>
 #include "server.h"
 
@@ -73,15 +74,22 @@ void server_startup(server_startup_st *construct)
         if (x == 0)
         {
           sprintf(buffer, "%s -d -P /tmp/%umemc.pid -t 1 -p %u -U %u -m 128",
-                    MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE);
+                 MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE);
         }
         else
         {
           sprintf(buffer, "%s -d -P /tmp/%umemc.pid -t 1 -p %u -U %u",
-                    MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE);
+                 MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE);
         }
-        fprintf(stderr, "STARTING SERVER: %s\n", buffer);
-        status= system(buffer);
+       if (libmemcached_ping("localhost", (in_port_t)(x + TEST_PORT_BASE), NULL))
+       {
+         fprintf(stderr, "Server on port %u already exists\n", x + TEST_PORT_BASE);
+       }
+       else
+       {
+         status= system(buffer);
+         fprintf(stderr, "STARTING SERVER: %s  status:%d\n", buffer, status);
+       }
         count= sprintf(end_ptr, "localhost:%u,", x + TEST_PORT_BASE);
         end_ptr+= count;
       }