From 6d1b80bdeb5e0df3dee6a8bc05d7e3f622371c1c Mon Sep 17 00:00:00 2001 From: JuanJo Ciarlante Date: Thu, 24 Sep 2009 20:09:55 +0200 Subject: * correctly setup hints.ai_socktype for getaddrinfo(), althought sorta hacky, see TODO.ipv6. --- socket.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'socket.c') 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, -- cgit