summaryrefslogtreecommitdiffstats
path: root/socket.c
diff options
context:
space:
mode:
authorJuanJo Ciarlante <jjo@google.com>2009-09-24 20:09:55 +0200
committerJuanJo Ciarlante <juanjosec@gmail.com>2011-03-25 13:30:29 +0100
commit6d1b80bdeb5e0df3dee6a8bc05d7e3f622371c1c (patch)
treeb9be9a75dc0df2bc915950ab20d7668e351276da /socket.c
parente47877099ebe7d98eb74c2b3efff902a77d0253f (diff)
downloadopenvpn-6d1b80bdeb5e0df3dee6a8bc05d7e3f622371c1c.tar.gz
openvpn-6d1b80bdeb5e0df3dee6a8bc05d7e3f622371c1c.tar.xz
openvpn-6d1b80bdeb5e0df3dee6a8bc05d7e3f622371c1c.zip
* correctly setup hints.ai_socktype for getaddrinfo(),
althought sorta hacky, see TODO.ipv6.
Diffstat (limited to 'socket.c')
-rw-r--r--socket.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/socket.c b/socket.c
index 3024ea4..96d2602 100644
--- a/socket.c
+++ b/socket.c
@@ -52,13 +52,12 @@ const int proto_overhead[] = { /* indexed by PROTO_x */
* Convert sockflags/getaddr_flags into getaddr_flags
*/
static unsigned int
-sf2gaf(const unsigned int getaddr_flags,
+sf2gaf(unsigned int getaddr_flags,
const unsigned int sockflags)
{
- if (sockflags & SF_HOST_RANDOMIZE)
- return getaddr_flags | GETADDR_RANDOMIZE;
- else
- return getaddr_flags;
+ getaddr_flags |= (sockflags & SF_GETADDRINFO_DGRAM) ? GETADDR_DGRAM : 0;
+ getaddr_flags |= (sockflags & SF_HOST_RANDOMIZE) ? GETADDR_RANDOMIZE : 0;
+ return getaddr_flags;
}
/*
@@ -375,7 +374,11 @@ getaddr6 (unsigned int flags,
{
/* try hostname lookup */
hints.ai_flags = 0;
+ hints.ai_socktype = dnsflags_to_socktype(flags);
+ dmsg (D_SOCKET_DEBUG, "GETADDR6 flags=0x%04x ai_family=%d ai_socktype=%d",
+ flags, hints.ai_family, hints.ai_socktype);
err = getaddrinfo(hostname, NULL, &hints, &ai);
+
if (gai_err)
*gai_err = err;
@@ -891,6 +894,7 @@ create_socket (struct link_socket *sock)
if (sock->info.proto == PROTO_UDPv4)
{
sock->sd = create_socket_udp (sock->sockflags);
+ sock->sockflags |= SF_GETADDRINFO_DGRAM;
#ifdef ENABLE_SOCKS
if (sock->socks_proxy)
@@ -911,6 +915,7 @@ create_socket (struct link_socket *sock)
else if (sock->info.proto == PROTO_UDPv6)
{
sock->sd = create_socket_udp6 (sock->sockflags);
+ sock->sockflags |= SF_GETADDRINFO_DGRAM;
}
#endif
else
@@ -1492,7 +1497,6 @@ resolve_remote (struct link_socket *sock,
}
#endif
-
dmsg (D_SOCKET_DEBUG, "RESOLVE_REMOTE flags=0x%04x phase=%d rrs=%d sig=%d status=%d",
flags,
phase,