Update free port logic.
[m6w6/libmemcached] / libtest / gearmand.cc
index 6149b3c6c6470f1b4b049bcefbb97e7148d9cf0d..bcb7f8aaba2d7bcd7d033d4bf534b14b5ece03d2 100644 (file)
@@ -37,6 +37,7 @@ using namespace libtest;
 #include <cstring>
 #include <iostream>
 #include <signal.h>
+#include <sstream>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
@@ -66,13 +67,12 @@ public:
   bool call(const bool success, const std::string &response)
   {
     _pid= -1;
-
     if (success and response.size())
     {
       _pid= atoi(response.c_str());
     }
 
-    if (_pid < 1)
+    if (is_pid_valid(_pid) == false)
     {
       _pid= -1;
       return false;
@@ -90,11 +90,13 @@ private:
 public:
   Gearmand(const std::string& host_arg, in_port_t port_arg) :
     libtest::Server(host_arg, port_arg)
-  { }
+  {
+    set_pid_file();
+  }
 
   pid_t get_pid(bool error_is_ok)
   {
-    if (not pid_file().empty())
+    if (pid_file().empty() == false)
     {
       Wait wait(pid_file(), 0);
 
@@ -122,12 +124,12 @@ public:
   bool ping()
   {
     gearman_client_st *client= gearman_client_create(NULL);
-    if (not client)
+    if (client == NULL)
     {
       Error << "Could not allocate memory for gearman_client_create()";
       return false;
     }
-    gearman_client_set_timeout(client, 1000);
+    gearman_client_set_timeout(client, 3000);
 
     if (gearman_success(gearman_client_add_server(client, hostname().c_str(), port())))
     {
@@ -138,6 +140,13 @@ public:
         gearman_client_free(client);
         return true;
       }
+#if 0
+      Error << hostname().c_str() << ":" << port() << " was " << gearman_strerror(rc) << " extended: " << gearman_client_error(client);
+#endif
+    }
+    else
+    {
+      Error << "gearman_client_add_server() " << gearman_client_error(client);
     }
 
     gearman_client_free(client);
@@ -167,7 +176,7 @@ public:
 
   const char *log_file_option()
   {
-    return "-vvvvv --log-file=";
+    return "--verbose=DEBUG --log-file=";
   }
 
   const char *port_option()
@@ -180,12 +189,14 @@ public:
     return true;
   }
 
+  bool has_syslog() const
+  {
+    return true;
+  }
+
   bool build(int argc, const char *argv[]);
 };
 
-
-#include <sstream>
-
 bool Gearmand::build(int argc, const char *argv[])
 {
   std::stringstream arg_buffer;
@@ -195,7 +206,7 @@ bool Gearmand::build(int argc, const char *argv[])
     arg_buffer << " -u root ";
   }
 
-  arg_buffer << " --listen=127.0.0.1 ";
+  arg_buffer << " --listen=localhost ";
 
   for (int x= 1 ; x < argc ; x++)
   {