#include "logger.h"
#include "meta.h"
#include "net.h"
+#include "netutl.h"
#include "protocol.h"
#include "route.h"
#include "splay_tree.h"
#else
chmod(pidfilename, 0600);
#endif
+ // Get the address and port of the first listening socket
- fprintf(f, "%s %s %d\n", controlcookie, myport, getpid());
+ char *localhost = NULL;
+ sockaddr_t sa;
+ socklen_t len = sizeof sa;
+
+ if(getsockname(listen_socket[0].tcp, (struct sockaddr *)&sa, &len))
+ xasprintf(&localhost, "127.0.0.1 port %d", myport);
+ else
+ localhost = sockaddr2hostname(&sa);
+
+ fprintf(f, "%d %s %s\n", (int)getpid(), controlcookie, localhost);
+
+ free(localhost);
fclose(f);
return true;
static char controlcookie[1024];
char *netname = NULL;
char *confbase = NULL;
-static char *host = NULL;
#ifdef HAVE_MINGW
static struct WSAData wsa_state;
static struct option const long_options[] = {
{"config", required_argument, NULL, 'c'},
- {"host", required_argument, NULL, 'h'},
{"net", required_argument, NULL, 'n'},
{"help", no_argument, NULL, 1},
{"version", no_argument, NULL, 2},
int r;
int option_index = 0;
- while((r = getopt_long(argc, argv, "c:n:h:", long_options, &option_index)) != EOF) {
+ while((r = getopt_long(argc, argv, "c:n:", long_options, &option_index)) != EOF) {
switch (r) {
case 0: /* long option */
break;
confbase = xstrdup(optarg);
break;
- case 'h': /* alternative host to connect to */
- host = xstrdup(optarg);
- break;
-
case 'n': /* net name given */
netname = xstrdup(optarg);
break;
int main(int argc, char *argv[], char *envp[]) {
int fd;
int result;
+ char host[128];
char port[128];
int pid;
fprintf(stderr, "Could not open pid file %s: %s\n", pidfilename, strerror(errno));
return 1;
}
- if(fscanf(f, "%1024s %128s %20d", controlcookie, port, &pid) != 3) {
+ if(fscanf(f, "%20d %1024s %128s port %128s", &pid, controlcookie, host, port) != 4) {
fprintf(stderr, "Could not parse pid file %s\n", pidfilename);
return 1;
}