1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

improved address lookup for socket bind()

git-svn-id: https://zerberus.eonerc.rwth-aachen.de:8443/svn/s2ss/trunk@76 8ec27952-4edc-4aab-86aa-e87bb2611832
This commit is contained in:
Steffen Vogel 2014-06-25 01:53:42 +00:00
parent 843c862542
commit dbc91f474a
2 changed files with 9 additions and 16 deletions

View file

@ -195,7 +195,7 @@ int config_parse_node(config_setting_t *cfg, struct node **nodes)
if (node->type == NODE_INVALID)
cerror(cfg, "Invalid type '%s' for node '%s'", type_str, node->name);
if (resolve_addr(local_str, &node->local, 0))
if (resolve_addr(local_str, &node->local, AI_PASSIVE))
cerror(cfg, "Failed to resolve local address '%s' of node '%s'", local_str, node->name);
if (resolve_addr(remote_str, &node->remote, 0))

View file

@ -48,23 +48,17 @@ void print(enum log_level lvl, const char *fmt, ...)
int resolve_addr(const char *addr, struct sockaddr_in *sa, int flags)
{
int ret;
char *node;
char *service;
/* Split addr into node:service */
if (sscanf(addr, "%m[^:]:%ms", &node, &service) != 2)
return -EINVAL;
/* Split string */
char *tmp = strdup(addr);
char *node = strtok(tmp, ":");
char *service = strtok(NULL, ":");
/* Check for wildcards */
if (!strcmp(node, "*")) {
free(node);
if (node && !strcmp(node, "*"))
node = NULL;
}
if (!strcmp(service, "*")) {
free(service);
if (service && !strcmp(service, "*"))
service = NULL;
}
/* Get IP */
struct addrinfo *result;
@ -77,12 +71,11 @@ int resolve_addr(const char *addr, struct sockaddr_in *sa, int flags)
ret = getaddrinfo(node, service, &hint, &result);
if (ret)
error("Failed to lookup address: %s", gai_strerror(ret));
error("Failed to lookup address '%s': %s", addr, gai_strerror(ret));
memcpy(sa, result->ai_addr, result->ai_addrlen);
free(node);
free(service);
free(tmp);
freeaddrinfo(result);
return 0;