mirror of https://github.com/yandex/odyssey.git
odyssey: do not resolve ip addresses
This commit is contained in:
parent
6303a388ec
commit
13ed93f464
|
@ -13,6 +13,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include <machinarium.h>
|
#include <machinarium.h>
|
||||||
#include <kiwi.h>
|
#include <kiwi.h>
|
||||||
|
@ -262,23 +263,49 @@ od_backend_connect_to(od_server_t *server,
|
||||||
uint64_t time_connect_start;
|
uint64_t time_connect_start;
|
||||||
time_connect_start = machine_time();
|
time_connect_start = machine_time();
|
||||||
|
|
||||||
struct sockaddr_un saddr_un;
|
struct sockaddr_un saddr_un;
|
||||||
struct sockaddr *saddr;
|
struct sockaddr_in saddr_v4;
|
||||||
|
struct sockaddr_in6 saddr_v6;
|
||||||
|
struct sockaddr *saddr;
|
||||||
struct addrinfo *ai = NULL;
|
struct addrinfo *ai = NULL;
|
||||||
if (server_config->host) {
|
|
||||||
/* resolve server address */
|
/* resolve server address */
|
||||||
char port[16];
|
if (server_config->host)
|
||||||
od_snprintf(port, sizeof(port), "%d", server_config->port);
|
{
|
||||||
rc = machine_getaddrinfo(server_config->host, port, NULL, &ai, 0);
|
/* assume IPv6 or IPv4 is specified */
|
||||||
if (rc != 0) {
|
int rc_resolve = -1;
|
||||||
od_error(&instance->logger, context, NULL, server,
|
if (strchr(server_config->host, ':')) {
|
||||||
"failed to resolve %s:%d",
|
/* v6 */
|
||||||
server_config->host,
|
memset(&saddr_v6, 0, sizeof(saddr_v6));
|
||||||
server_config->port);
|
saddr_v6.sin6_family = AF_INET6;
|
||||||
return -1;
|
saddr_v6.sin6_port = htons(server_config->port);
|
||||||
|
rc_resolve = inet_pton(AF_INET6, server_config->host, &saddr_v6.sin6_addr);
|
||||||
|
saddr = (struct sockaddr*)&saddr_v6;
|
||||||
|
} else {
|
||||||
|
/* v4 or hostname */
|
||||||
|
memset(&saddr_v4, 0, sizeof(saddr_v4));
|
||||||
|
saddr_v4.sin_family = AF_INET;
|
||||||
|
saddr_v4.sin_port = htons(server_config->port);
|
||||||
|
rc_resolve = inet_pton(AF_INET, server_config->host, &saddr_v4.sin_addr);
|
||||||
|
saddr = (struct sockaddr*)&saddr_v4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* schedule getaddrinfo() execution */
|
||||||
|
if (rc_resolve != 1) {
|
||||||
|
char port[16];
|
||||||
|
od_snprintf(port, sizeof(port), "%d", server_config->port);
|
||||||
|
|
||||||
|
rc = machine_getaddrinfo(server_config->host, port, NULL, &ai, 0);
|
||||||
|
if (rc != 0) {
|
||||||
|
od_error(&instance->logger, context, NULL, server,
|
||||||
|
"failed to resolve %s:%d",
|
||||||
|
server_config->host,
|
||||||
|
server_config->port);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
assert(ai != NULL);
|
||||||
|
saddr = ai->ai_addr;
|
||||||
}
|
}
|
||||||
assert(ai != NULL);
|
|
||||||
saddr = ai->ai_addr;
|
|
||||||
} else {
|
} else {
|
||||||
/* set unix socket path */
|
/* set unix socket path */
|
||||||
memset(&saddr_un, 0, sizeof(saddr_un));
|
memset(&saddr_un, 0, sizeof(saddr_un));
|
||||||
|
|
Loading…
Reference in New Issue