/* ================================================== */
-#define MAX_ADDRESSES 16
-
static ARR_Instance
get_sockaddrs(const char *hostnames, int port)
{
ARR_Instance addrs;
char *hostname, *s1, *s2;
- IPAddr ip_addrs[MAX_ADDRESSES];
+ IPAddr ip_addrs[DNS_MAX_ADDRESSES];
union sockaddr_all *addr;
int i;
LOG_FATAL(LOGF_Client, "Unix socket path too long");
addr->un.sun_family = AF_UNIX;
} else {
- if (DNS_Name2IPAddress(hostname, ip_addrs, MAX_ADDRESSES) != DNS_Success) {
+ if (DNS_Name2IPAddress(hostname, ip_addrs, DNS_MAX_ADDRESSES) != DNS_Success) {
DEBUG_LOG(LOGF_Client, "Could not get IP address for %s", hostname);
break;
}
- for (i = 0; i < MAX_ADDRESSES && ip_addrs[i].family != IPADDR_UNSPEC; i++) {
+ for (i = 0; i < DNS_MAX_ADDRESSES && ip_addrs[i].family != IPADDR_UNSPEC; i++) {
addr = (union sockaddr_all *)ARR_GetNewElement(addrs);
UTI_IPAndPortToSockaddr(&ip_addrs[i], port, (struct sockaddr *)addr);
DEBUG_LOG(LOGF_Client, "Resolved %s to %s", hostname, UTI_IPToString(&ip_addrs[i]));
#ifdef HAVE_GETADDRINFO
struct addrinfo hints, *res, *ai;
int i, result;
-
+
+ max_addrs = MIN(max_addrs, DNS_MAX_ADDRESSES);
+
memset(&hints, 0, sizeof (hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if (address_family != IPADDR_UNSPEC && address_family != IPADDR_INET4)
return DNS_Failure;
+ max_addrs = MIN(max_addrs, DNS_MAX_ADDRESSES);
+
host = gethostbyname(name);
if (host == NULL) {
/* Resolve names only to selected address family */
extern void DNS_SetAddressFamily(int family);
+/* Maximum number of addresses returned by DNS_Name2IPAddress */
+#define DNS_MAX_ADDRESSES 16
+
extern DNS_Status DNS_Name2IPAddress(const char *name, IPAddr *ip_addrs, int max_addrs);
extern int DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len);
#ifdef USE_PTHREAD_ASYNCDNS
#include <pthread.h>
-#define MAX_ADDRESSES 16
-
/* ================================================== */
struct DNS_Async_Instance {
const char *name;
DNS_Status status;
- IPAddr addresses[MAX_ADDRESSES];
+ IPAddr addresses[DNS_MAX_ADDRESSES];
DNS_NameResolveHandler handler;
void *arg;
{
struct DNS_Async_Instance *inst = (struct DNS_Async_Instance *)anything;
- inst->status = DNS_Name2IPAddress(inst->name, inst->addresses, MAX_ADDRESSES);
+ inst->status = DNS_Name2IPAddress(inst->name, inst->addresses, DNS_MAX_ADDRESSES);
/* Notify the main thread that the result is ready */
if (write(inst->pipe[1], "", 1) < 0)
close(inst->pipe[0]);
close(inst->pipe[1]);
- for (i = 0; inst->status == DNS_Success && i < MAX_ADDRESSES &&
+ for (i = 0; inst->status == DNS_Success && i < DNS_MAX_ADDRESSES &&
inst->addresses[i].family != IPADDR_UNSPEC; i++)
;
#ifndef FEAT_ASYNCDNS
-#define MAX_ADDRESSES 16
-
/* This is a blocking implementation used when asynchronous resolving is not available */
struct DNS_Async_Instance {
resolve_name(void *anything)
{
struct DNS_Async_Instance *inst;
- IPAddr addrs[MAX_ADDRESSES];
+ IPAddr addrs[DNS_MAX_ADDRESSES];
DNS_Status status;
int i;
inst = (struct DNS_Async_Instance *)anything;
- status = DNS_Name2IPAddress(inst->name, addrs, MAX_ADDRESSES);
+ status = DNS_Name2IPAddress(inst->name, addrs, DNS_MAX_ADDRESSES);
- for (i = 0; status == DNS_Success && i < MAX_ADDRESSES &&
+ for (i = 0; status == DNS_Success && i < DNS_MAX_ADDRESSES &&
addrs[i].family != IPADDR_UNSPEC; i++)
;