X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fgetaddrinfo.c;h=ce531efab88a114c24a30b503288ef78459861fb;hb=a0e430a78b44297628468fac5fd6717da894537d;hp=4595cc47a041a4ac6f3e1a1775b9edfc866b785e;hpb=a2df84f2250bbe1dc2ac610687e784c73b10e8e9;p=pazpar2-moved-to-github.git diff --git a/src/getaddrinfo.c b/src/getaddrinfo.c index 4595cc4..ce531ef 100644 --- a/src/getaddrinfo.c +++ b/src/getaddrinfo.c @@ -1,4 +1,4 @@ -/* $Id: getaddrinfo.c,v 1.3 2007-04-23 07:34:48 adam Exp $ +/* $Id: getaddrinfo.c,v 1.6 2007-07-09 20:00:41 adam Exp $ Copyright (c) 2006-2007, Index Data. This file is part of Pazpar2. @@ -39,6 +39,8 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include "pazpar2.h" +#include "connection.h" +#include "host.h" struct work { char *hostport; /* hostport to be resolved in separate thread */ @@ -52,7 +54,11 @@ void perform_getaddrinfo(struct work *w) { int res = 0; char *port; +#if HAVE_GETADDRINFO struct addrinfo *addrinfo, hints; +#else + struct hostent *hp; +#endif char *hostport = xstrdup(w->hostport); if ((port = strchr(hostport, ':'))) @@ -60,6 +66,7 @@ void perform_getaddrinfo(struct work *w) else port = "210"; +#if HAVE_GETADDRINFO hints.ai_flags = 0; hints.ai_family = PF_INET; hints.ai_socktype = SOCK_STREAM; @@ -88,6 +95,24 @@ void perform_getaddrinfo(struct work *w) w->ipport = xstrdup(ipport); yaz_log(log_level, "Resolved %s -> %s", hostport, ipport); } +#else + hp = gethostbyname(hostport); + if (!hp) + { + yaz_log(YLOG_WARN|YLOG_ERRNO, "Failed to resolve %s", hostport); + } + else + { + char ipport[128]; + unsigned char addrbuf[4]; + + memcpy(addrbuf, *hp->h_addr_list, 4 * sizeof(unsigned char)); + sprintf(ipport, "%u.%u.%u.%u:%s", + addrbuf[0], addrbuf[1], addrbuf[2], addrbuf[3], port); + w->ipport = xstrdup(ipport); + yaz_log(log_level, "Resolved %s -> %s", hostport, ipport); + } +#endif xfree(hostport); } @@ -122,7 +147,9 @@ static sel_thread_t resolver_thread = 0; static void getaddrinfo_start(void) { int fd; - sel_thread_t p = resolver_thread = sel_thread_create(work_handler, &fd); + sel_thread_t p = resolver_thread = + sel_thread_create(work_handler, 0 /* work_destroy */, &fd, + 3 /* no of resolver threads */); if (!p) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "sel_create_create failed");