class_docstr: Configurable asynchronous DNS resolver interface.
  
  By default, a blocking implementation is used (which simply calls
  `socket.getaddrinfo`).  An alternative implementation can be
  chosen with the `Resolver.configure <.Configurable.configure>`
  class method::
  
      Resolver.configure('tornado.netutil.ThreadedResolver')
  
  The implementations of this interface included with Tornado are
  
  * `tornado.netutil.DefaultLoopResolver`
  * `tornado.netutil.DefaultExecutorResolver` (deprecated)
  * `tornado.netutil.BlockingResolver` (deprecated)
  * `tornado.netutil.ThreadedResolver` (deprecated)
  * `tornado.netutil.OverrideResolver`
  * `tornado.platform.twisted.TwistedResolver` (deprecated)
  * `tornado.platform.caresresolver.CaresResolver` (deprecated)
  
  .. versionchanged:: 5.0
     The default implementation has changed from `BlockingResolver` to
     `DefaultExecutorResolver`.
  
  .. versionchanged:: 6.2
     The default implementation has changed from `DefaultExecutorResolver` to
     `DefaultLoopResolver`.
class_docstr_tok: ["Configurable","asynchronous","DNS","resolver","interface",".","By","default",",","a","blocking","implementation","is","used","(","which","simply","calls","`","socket.getaddrinfo","`",")",".","An","alternative","implementation","can","be","chosen","with","the","`","Resolver.configure","<",".Configurable.configure",">","`","class","method",":",":","Resolver.configure","(","'tornado.netutil.ThreadedResolver","'",")","The","implementations","of","this","interface","included","with","Tornado","are","*","`","tornado.netutil.DefaultLoopResolver","`","*","`","tornado.netutil.DefaultExecutorResolver","`","(","deprecated",")","*","`","tornado.netutil.BlockingResolver","`","(","deprecated",")","*","`","tornado.netutil.ThreadedResolver","`","(","deprecated",")","*","`","tornado.netutil.OverrideResolver","`","*","`","tornado.platform.twisted.TwistedResolver","`","(","deprecated",")","*","`","tornado.platform.caresresolver.CaresResolver","`","(","deprecated",")","..","versionchanged",":",":","5.0","The","default","implementation","has","changed","from","`","BlockingResolver","`","to","`","DefaultExecutorResolver","`",".","..","versionchanged",":",":","6.2","The","default","implementation","has","changed","from","`","DefaultExecutorResolver","`","to","`","DefaultLoopResolver","`","."]
docstr: Resolves an address.
  
  The ``host`` argument is a string which may be a hostname or a
  literal IP address.
  
  Returns a `.Future` whose result is a list of (family,
  address) pairs, where address is a tuple suitable to pass to
  `socket.connect <socket.socket.connect>` (i.e. a ``(host,
  port)`` pair for IPv4; additional fields may be present for
  IPv6). If a ``callback`` is passed, it will be run with the
  result as an argument when it is complete.
  
  :raises IOError: if the address cannot be resolved.
  
  .. versionchanged:: 4.4
     Standardized all implementations to raise `IOError`.
  
  .. versionchanged:: 6.0 The ``callback`` argument was removed.
     Use the returned awaitable object instead.
docstr_tok: ["Resolves","an","address",".","The","``","host","``","argument","is","a","string","which","may","be","a","hostname","or","a","literal","IP","address",".","Returns","a","`",".Future","`","whose","result","is","a","list","of","(","family",",","address",")","pairs",",","where","address","is","a","tuple","suitable","to","pass","to","`","socket.connect","<","socket.socket.connect",">","`","(","i.e",".","a","``","(","host",",","port",")","``","pair","for","IPv4",";","additional","fields","may","be","present","for","IPv6",")",".","If","a","``","callback","``","is","passed",",","it","will","be","run","with","the","result","as","an","argument","when","it","is","complete",".",":","raises","IOError",":","if","the","address","can","not","be","resolved",".","..","versionchanged",":",":","4.4","Standardized","all","implementations","to","raise","`","IOError","`",".","..","versionchanged",":",":","6.0","The","``","callback","``","argument","was","removed",".","Use","the","returned","awaitable","object","instead","."]
code: def resolve(
      self,
      host: str,
      port: int,
      family: socket.AddressFamily = socket.AF_UNSPEC,
  ) -> Awaitable[List[Tuple[int, Any]]]:
      """Resolves an address.
  
      The ``host`` argument is a string which may be a hostname or a
      literal IP address.
  
      Returns a `.Future` whose result is a list of (family,
      address) pairs, where address is a tuple suitable to pass to
      `socket.connect <socket.socket.connect>` (i.e. a ``(host,
      port)`` pair for IPv4; additional fields may be present for
      IPv6). If a ``callback`` is passed, it will be run with the
      result as an argument when it is complete.
  
      :raises IOError: if the address cannot be resolved.
  
      .. versionchanged:: 4.4
         Standardized all implementations to raise `IOError`.
  
      .. versionchanged:: 6.0 The ``callback`` argument was removed.
         Use the returned awaitable object instead.
  
      """
      raise NotImplementedError()
  
imports: import asyncio
  import concurrent.futures
  import errno
  import os
  import sys
  import socket
  import ssl
  import stat
  from tornado.concurrent import dummy_executor, run_on_executor
  from tornado.ioloop import IOLoop
  from tornado.util import Configurable, errno_from_exception
  from typing import List, Callable, Any, Type, Dict, Union, Tuple, Awaitable, Optional
label_desc: Use image node_id 3 for calling the Resolver obj's underlying member method code with example usage: obj.resolve(host, port, family) without return types