summaryrefslogtreecommitdiffstats
path: root/polyp/socket-client.c
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2006-01-05 17:43:06 +0000
committerPierre Ossman <ossman@cendio.se>2006-01-05 17:43:06 +0000
commit70223bac46f53f89041db61d2a06ea772968ce2d (patch)
treeeb5ed55d62e1e65258051e2f8d41a41cf4b45c34 /polyp/socket-client.c
parent3f2ac7eb8ce8db8947f1bfc195f845be0d409fde (diff)
Fallbacks for systems that do not have getaddrinfo(). Does not handle
IPv6 though. git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/ossman@369 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/socket-client.c')
-rw-r--r--polyp/socket-client.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/polyp/socket-client.c b/polyp/socket-client.c
index f02b74bd..40bbcc3e 100644
--- a/polyp/socket-client.c
+++ b/polyp/socket-client.c
@@ -426,8 +426,9 @@ struct pa_socket_client* pa_socket_client_new_string(struct pa_mainloop_api *m,
assert(c->asyncns_query);
start_timeout(c);
}
-#else
+#else /* HAVE_LIBASYNCNS */
{
+#ifdef HAVE_GETADDRINFO
int ret;
struct addrinfo *res = NULL;
@@ -438,12 +439,37 @@ struct pa_socket_client* pa_socket_client_new_string(struct pa_mainloop_api *m,
if (res->ai_addr) {
if ((c = pa_socket_client_new_sockaddr(m, res->ai_addr, res->ai_addrlen)))
- start_timeout(c);
+ start_timeout(c);
}
freeaddrinfo(res);
+#else /* HAVE_GETADDRINFO */
+ struct hostent *host = NULL;
+ struct sockaddr_in s;
+
+ /* FIXME: PF_INET6 support */
+ if (hints.ai_family != PF_INET)
+ goto finish;
+
+ host = gethostbyname(a.path_or_host);
+ if (!host) {
+ unsigned int addr = inet_addr(a.path_or_host);
+ if (addr != INADDR_NONE)
+ host = gethostbyaddr((char*)&addr, 4, AF_INET);
+ }
+
+ if (!host)
+ goto finish;
+
+ s.sin_family = AF_INET;
+ memcpy(&s.sin_addr, host->h_addr, sizeof(struct in_addr));
+ s.sin_port = port;
+
+ if ((c = pa_socket_client_new_sockaddr(m, &s, sizeof(s))))
+ start_timeout(c);
+#endif /* HAVE_GETADDRINFO */
}
-#endif
+#endif /* HAVE_LIBASYNCNS */
}
}