From 4793dc0638330ef5296c126d136489228d9521b0 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 27 Nov 2010 03:31:35 +0000 Subject: listening on tcp sockets works now git-svn-id: https://svn.spreadspace.org/tcpproxy/trunk@8 e61f0598-a718-4e21-a8f0-0aadfa62ad6b --- src/tcp.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/tcp.c') diff --git a/src/tcp.c b/src/tcp.c index 42db969..0211526 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -29,10 +29,14 @@ #include #include #include +#include +#include +#include #include "datatypes.h" #include "tcp.h" +#include "log.h" char* tcp_endpoint_to_string(tcp_endpoint_t e) { @@ -68,3 +72,31 @@ char* tcp_endpoint_to_string(tcp_endpoint_t e) free(addrstr); return ret; } + +struct addrinfo* tcp_resolve_endpoint(const char* addr, const char* port, resolv_type_t rt) +{ + struct addrinfo hints, *res; + + res = NULL; + memset (&hints, 0, sizeof (hints)); + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; + + switch(rt) { + case IPV4_ONLY: hints.ai_family = AF_INET; break; + case IPV6_ONLY: hints.ai_family = AF_INET6; break; + default: hints.ai_family = AF_UNSPEC; break; + } + + int errcode = getaddrinfo(addr, port, &hints, &res); + if (errcode != 0) { + log_printf(ERROR, "Error resolving local address (%s:%s): %s", (addr) ? addr : "*", port, gai_strerror(errcode)); + return NULL; + } + if(!res) { + log_printf(ERROR, "getaddrinfo returned no address for %s:%s", addr, port); + return NULL; + } + + return res; +} -- cgit v1.2.3