+#pragma once
+
+#include <cstring>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <string>
+#include <unistd.h>
+#include <vector>
+
+#define SERVERS_TO_CREATE 5
+
+struct server_st;
+
+typedef pid_t (test_server_getpid)(server_st &);
+typedef bool (test_server_ping)(server_st &);
+
+struct server_st {
+private:
+ bool _used;
+ pid_t _pid;
+ in_port_t _port;
+ char pid_file[FILENAME_MAX]; // Did we start it, or was it just sitting there?
+ std::string _command;
+ test_server_getpid *__get_pid;
+ test_server_ping *__ping;
+ std::string _hostname;
+
+public:
+ server_st(in_port_t port_arg, test_server_getpid *, test_server_ping *);
+
+ server_st(const std::string &socket_file, test_server_getpid *, test_server_ping *);
+
+ void set_methods(test_server_getpid *get_pid_arg, test_server_ping *ping_arg)
+ {
+ __get_pid= get_pid_arg;
+ __ping= ping_arg;
+ }
+
+ const char *hostname() const
+ {
+ if (_hostname.empty())
+ return "";
+
+ return _hostname.c_str();
+ }
+
+ bool ping()
+ {
+ if (__ping)
+ return __ping(*this);
+
+ return false;
+ }
+
+ pid_t get_pid()
+ {
+ if (__get_pid)
+ return _pid= __get_pid(*this);
+
+ return -1;
+ }
+
+ void set_port(in_port_t arg)
+ {
+ _port= arg;
+ }