- {
- union { struct sockaddr s; struct sockaddr_in a4; struct sockaddr_in6 a6; } addr;
- socklen_t len = sizeof(addr);
- socklen_t inner_len = 0;
- int sock = socket(AF_INET, SOCK_DGRAM, 0);
- src->type = mDNSAddrType_None;
- if (sock == -1) return;
- if (dst->type == mDNSAddrType_IPv4)
- {
- inner_len = sizeof(addr.a4);
- #ifndef NOT_HAVE_SA_LEN
- addr.a4.sin_len = inner_len;
- #endif
- addr.a4.sin_family = AF_INET;
- addr.a4.sin_port = 1; // Not important, any port will do
- addr.a4.sin_addr.s_addr = dst->ip.v4.NotAnInteger;
- }
- else if (dst->type == mDNSAddrType_IPv6)
- {
- inner_len = sizeof(addr.a6);
- #ifndef NOT_HAVE_SA_LEN
- addr.a6.sin6_len = inner_len;
- #endif
- addr.a6.sin6_family = AF_INET6;
- addr.a6.sin6_flowinfo = 0;
- addr.a6.sin6_port = 1; // Not important, any port will do
- addr.a6.sin6_addr = *(struct in6_addr*)&dst->ip.v6;
- addr.a6.sin6_scope_id = 0;
- }
- else return;
-
- if ((connect(sock, &addr.s, inner_len)) < 0)
- { LogMsg("mDNSPlatformSourceAddrForDest: connect %#a failed errno %d (%s)", dst, errno, strerror(errno)); goto exit; }
-
- if ((getsockname(sock, &addr.s, &len)) < 0)
- { LogMsg("mDNSPlatformSourceAddrForDest: getsockname failed errno %d (%s)", errno, strerror(errno)); goto exit; }
-
- src->type = dst->type;
- if (dst->type == mDNSAddrType_IPv4) src->ip.v4.NotAnInteger = addr.a4.sin_addr.s_addr;
- else src->ip.v6 = *(mDNSv6Addr*)&addr.a6.sin6_addr;
+{
+ union { struct sockaddr s; struct sockaddr_in a4; struct sockaddr_in6 a6; } addr;
+ socklen_t len = sizeof(addr);
+ socklen_t inner_len = 0;
+ int sock = socket(AF_INET, SOCK_DGRAM, 0);
+ src->type = mDNSAddrType_None;
+ if (sock == -1) return;
+ if (dst->type == mDNSAddrType_IPv4)
+ {
+ inner_len = sizeof(addr.a4);
+ #ifndef NOT_HAVE_SA_LEN
+ addr.a4.sin_len = inner_len;
+ #endif
+ addr.a4.sin_family = AF_INET;
+ addr.a4.sin_port = 1; // Not important, any port will do
+ addr.a4.sin_addr.s_addr = dst->ip.v4.NotAnInteger;
+ }
+ else if (dst->type == mDNSAddrType_IPv6)
+ {
+ inner_len = sizeof(addr.a6);
+ #ifndef NOT_HAVE_SA_LEN
+ addr.a6.sin6_len = inner_len;
+ #endif
+ addr.a6.sin6_family = AF_INET6;
+ addr.a6.sin6_flowinfo = 0;
+ addr.a6.sin6_port = 1; // Not important, any port will do
+ addr.a6.sin6_addr = *(struct in6_addr*)&dst->ip.v6;
+ addr.a6.sin6_scope_id = 0;
+ }
+ else return;
+
+ if ((connect(sock, &addr.s, inner_len)) < 0)
+ { LogMsg("mDNSPlatformSourceAddrForDest: connect %#a failed errno %d (%s)", dst, errno, strerror(errno)); goto exit; }
+
+ if ((getsockname(sock, &addr.s, &len)) < 0)
+ { LogMsg("mDNSPlatformSourceAddrForDest: getsockname failed errno %d (%s)", errno, strerror(errno)); goto exit; }
+
+ src->type = dst->type;
+ if (dst->type == mDNSAddrType_IPv4) src->ip.v4.NotAnInteger = addr.a4.sin_addr.s_addr;
+ else src->ip.v6 = *(mDNSv6Addr*)&addr.a6.sin6_addr;