summaryrefslogtreecommitdiffstats
path: root/polyp/socket-util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-09-28 22:47:48 +0000
committerLennart Poettering <lennart@poettering.net>2004-09-28 22:47:48 +0000
commit6f59ae1763ee48f27448a7de9d635f61886052e1 (patch)
treee83ab47226b6c716c200e9fa40f44668997eb642 /polyp/socket-util.c
parent450ad85b35bd600ed020f7ec119d51e7e7bc01a4 (diff)
Add module-tunnel
add proper locking when autospawning a daemon git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@245 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/socket-util.c')
-rw-r--r--polyp/socket-util.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/polyp/socket-util.c b/polyp/socket-util.c
index 20380653..499739bd 100644
--- a/polyp/socket-util.c
+++ b/polyp/socket-util.c
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
+#include <netdb.h>
#include "socket-util.h"
#include "util.h"
@@ -219,3 +220,35 @@ finish:
return ret;
}
+struct sockaddr *pa_resolve_server(const char *server, size_t *len, uint16_t nport) {
+ struct sockaddr *sa;
+ struct addrinfo hints, *result = NULL;
+ char *port, host[256], tmp[16];
+ assert(server && len);
+
+ snprintf(host, sizeof(host), "%s", server);
+ host[strcspn(host, ":")] = 0;
+
+ if ((port = strrchr(server, ':')))
+ port++;
+
+ if (!port)
+ snprintf(port = tmp, sizeof(tmp), "%u", nport);
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = 0;
+
+ if (getaddrinfo(host, port, &hints, &result) != 0)
+ return NULL;
+ assert(result);
+
+ sa = pa_xmalloc(*len = result->ai_addrlen);
+ memcpy(sa, result->ai_addr, *len);
+
+ freeaddrinfo(result);
+
+ return sa;
+}
+