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:
parent
843c862542
commit
dbc91f474a
2 changed files with 9 additions and 16 deletions
|
@ -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))
|
||||
|
|
23
src/utils.c
23
src/utils.c
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue