code: def _write_SOCKS5_address(self, addr, file):
          
          host, port = addr
          proxy_type, _, _, rdns, username, password = self.proxy
          family_to_byte = {socket.AF_INET: b"\x01", socket.AF_INET6: b"\x04"}
  
          # If the given destination address is an IP address, we'll
          # use the IP address request even if remote resolving was specified.
          # Detect whether the address is IPv4/6 directly.
          for family in (socket.AF_INET, socket.AF_INET6):
              try:
                  addr_bytes = socket.inet_pton(family, host)
                  file.write(family_to_byte[family] + addr_bytes)
                  host = socket.inet_ntop(family, addr_bytes)
                  file.write(struct.pack(">H", port))
                  return host, port
              except socket.error:
                  continue
  
          # Well it's not an IP number, so it's probably a DNS name.
          if rdns:
              # Resolve remotely
              host_bytes = host.encode('idna')
              file.write(b"\x03" + chr(len(host_bytes)).encode() + host_bytes)
          else:
              # Resolve locally
              addresses = socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM, socket.IPPROTO_TCP, socket.AI_ADDRCONFIG)
              # We can't really work out what IP is reachable, so just pick the
              # first.
              target_addr = addresses[0]
              family = target_addr[0]
              host = target_addr[4][0]
  
              addr_bytes = socket.inet_pton(family, host)
              file.write(family_to_byte[family] + addr_bytes)
              host = socket.inet_ntop(family, addr_bytes)
          file.write(struct.pack(">H", port))
          return host, port
docs: Return the host and port packed for the SOCKS5 protocol,
          and the resolved address as a tuple object.