diff --git a/nsock/src/nsock_proxy.c b/nsock/src/nsock_proxy.c index a8d6112ae..f90546e00 100644 --- a/nsock/src/nsock_proxy.c +++ b/nsock/src/nsock_proxy.c @@ -443,13 +443,21 @@ void nsock_proxy_ev_dispatch(nsock_pool nspool, nsock_event nsevent, void *udata } } -int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen) { +int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen, int ai_family) { + struct addrinfo hints; struct addrinfo *res; int rc; - rc = getaddrinfo(host, NULL, NULL, &res); - if (rc) + memset(&hints, 0, sizeof(hints)); + hints.ai_family = ai_family; + /* All proxy types are TCP-only at the moment */ + hints.ai_socktype = SOCK_STREAM; + + rc = getaddrinfo(host, NULL, &hints, &res); + if (rc) { + nsock_log_info("getaddrinfo error: %s", gai_strerror(rc)); return -abs(rc); + } *addr = *res->ai_addr; *addrlen = res->ai_addrlen; diff --git a/nsock/src/nsock_proxy.h b/nsock/src/nsock_proxy.h index ff29d8540..50e26a4a3 100644 --- a/nsock/src/nsock_proxy.h +++ b/nsock/src/nsock_proxy.h @@ -150,7 +150,7 @@ struct proxy_spec { /* ------------------- UTIL FUNCTIONS ------------------- */ -int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen); +int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen, int ai_family); static inline struct proxy_node *proxy_ctx_node_next(struct proxy_chain_context *ctx) { gh_lnode_t *next; diff --git a/nsock/src/proxy_http.c b/nsock/src/proxy_http.c index 3c6826c0b..bcdb1dfd1 100644 --- a/nsock/src/proxy_http.c +++ b/nsock/src/proxy_http.c @@ -75,7 +75,7 @@ static int proxy_http_node_new(struct proxy_node **node, const struct uri *uri) proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node)); proxy->spec = &ProxySpecHttp; - rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen); + rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen, AF_UNSPEC); if (rc < 0) { free(proxy); *node = NULL; diff --git a/nsock/src/proxy_socks4.c b/nsock/src/proxy_socks4.c index 9efc47f30..4c9f492f8 100644 --- a/nsock/src/proxy_socks4.c +++ b/nsock/src/proxy_socks4.c @@ -85,7 +85,7 @@ static int proxy_socks4_node_new(struct proxy_node **node, const struct uri *uri proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node)); proxy->spec = &ProxySpecSocks4; - rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen); + rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen, AF_INET); if (rc < 0) goto err_out;