- def _resolve_address(self, destaddr, default, use_remote_dns):
- try:
- return socket.inet_aton(destaddr)
- except socket.error:
- if use_remote_dns and self._proxy.remote_dns:
- return default
- else:
- return socket.inet_aton(socket.gethostbyname(destaddr))
+ def _resolve_address(self, destaddr, default, use_remote_dns, family=None):
+ for f in (family,) if family else (socket.AF_INET, socket.AF_INET6):
+ try:
+ return f, socket.inet_pton(f, destaddr)
+ except OSError:
+ continue
+
+ if use_remote_dns and self._proxy.remote_dns:
+ return 0, default
+ else:
+ res = socket.getaddrinfo(destaddr, None, family=family or 0)
+ f, _, _, _, ipaddr = res[0]
+ return f, socket.inet_pton(f, ipaddr[0])