diff --git a/server/src/cfg.c b/server/src/cfg.c index d082060c2..fc2e5a817 100644 --- a/server/src/cfg.c +++ b/server/src/cfg.c @@ -147,7 +147,7 @@ int config_parse_node(config_setting_t *cfg, struct node **nodes) { struct node *node; const char *remote, *local; - + int ret; /* Allocate memory */ node = (struct node *) malloc(sizeof(struct node)); @@ -167,12 +167,15 @@ int config_parse_node(config_setting_t *cfg, struct node **nodes) if (!config_setting_lookup_string(cfg, "local", &local)) cerror(cfg, "Missing local address for node '%s'", node->name); + ret = resolve_addr(local, &node->local, AI_PASSIVE); + if (ret) + cerror(cfg, "Failed to resolve local address '%s' of node '%s': %s", + local, node->name, gai_strerror(ret)); - if (resolve_addr(local, &node->local, AI_PASSIVE)) - cerror(cfg, "Failed to resolve local address '%s' of node '%s'", local, node->name); - - if (resolve_addr(remote, &node->remote, 0)) - cerror(cfg, "Failed to resolve remote address '%s' of node '%s'", remote, node->name); + ret = resolve_addr(remote, &node->remote, 0); + if (ret) + cerror(cfg, "Failed to resolve remote address '%s' of node '%s': %s", + remote, node->name, gai_strerror(ret)); config_setting_t *cfg_netem = config_setting_get_member(cfg, "netem"); if (cfg_netem) { diff --git a/server/src/receive.c b/server/src/receive.c index b1a541c34..92a3d285e 100644 --- a/server/src/receive.c +++ b/server/src/receive.c @@ -11,10 +11,10 @@ #include #include #include - #include #include #include +#include #include "config.h" #include "utils.h" @@ -54,8 +54,9 @@ int main(int argc, char *argv[]) sigaction(SIGINT, &sa_quit, NULL); /* Resolve addresses */ - if (resolve_addr(argv[1], &n.local, 0)) - error("Failed to resolve local address: %s", argv[1]); + int ret = resolve_addr(argv[1], &n.local, 0); + if (ret) + error("Failed to resolve local address '%s': %s", argv[1], gai_strerror(ret)); node_connect(&n); diff --git a/server/src/send.c b/server/src/send.c index e6296c440..6d3eaf0a2 100644 --- a/server/src/send.c +++ b/server/src/send.c @@ -56,16 +56,18 @@ int main(int argc, char *argv[]) sigaction(SIGINT, &sa_quit, NULL); /* Resolve addresses */ - if (resolve_addr(argv[1], &n.remote, 0)) - error("Failed to resolve remote address: %s", argv[1]); + int ret = resolve_addr(argv[1], &n.remote, 0); + if (ret) + error("Failed to resolve remote address '%s': %s", argv[1], gai_strerror(ret)); if (argc == 3) { - if (resolve_addr(argv[2], &n.local, AI_PASSIVE)) - error("Failed to resolve local address: %s", argv[2]); + ret = resolve_addr(argv[2], &n.local, AI_PASSIVE); + if (ret) + error("Failed to resolve local address '%s': %s", argv[2], gai_strerror(ret)); } else { n.local.sin_family = AF_INET; - n.local.sin_addr.s_addr = INADDR_ANY; + n.local.sin_addr.s_addr = INADDR_ANY; /* all local interfaces */ n.local.sin_port = 0; /* random port */ } diff --git a/server/src/test.c b/server/src/test.c index ee77d824b..a14cb85e2 100644 --- a/server/src/test.c +++ b/server/src/test.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "config.h" #include "msg.h" @@ -59,11 +60,13 @@ int main(int argc, char *argv[]) sigaction(SIGINT, &sa_quit, NULL); /* Resolve addresses */ - if (resolve_addr(argv[2], &n.local, 0)) - error("Failed to resolve local address: %s", argv[2]); + int ret = resolve_addr(argv[2], &n.local, AI_PASSIVE); + if (ret) + error("Failed to resolve local address '%s': %s", argv[1], gai_strerror(ret)); - if (resolve_addr(argv[3], &n.remote, 0)) - error("Failed to resolve remote address: %s", argv[3]); + ret = resolve_addr(argv[3], &n.remote, 0); + if (ret) + error("Failed to resolve remote address '%s': %s", argv[1], gai_strerror(ret)); node_connect(&n); diff --git a/server/src/utils.c b/server/src/utils.c index 8289295a0..1526b91c7 100644 --- a/server/src/utils.c +++ b/server/src/utils.c @@ -51,8 +51,6 @@ void print(enum log_level lvl, const char *fmt, ...) int resolve_addr(const char *addr, struct sockaddr_in *sa, int flags) { - int ret; - /* Split string */ char *tmp = strdup(addr); char *node = strtok(tmp, ":"); @@ -73,16 +71,15 @@ int resolve_addr(const char *addr, struct sockaddr_in *sa, int flags) .ai_protocol = 0 }; - ret = getaddrinfo(node, service, &hint, &result); - if (ret) - error("Failed to lookup address '%s': %s", addr, gai_strerror(ret)); - - memcpy(sa, result->ai_addr, result->ai_addrlen); + int ret = getaddrinfo(node, service, &hint, &result); + if (!ret) { + memcpy(sa, result->ai_addr, result->ai_addrlen); + freeaddrinfo(result); + } free(tmp); - freeaddrinfo(result); - return 0; + return ret; } cpu_set_t to_cpu_set(int set)