class_docstr: Name resolver based on the c-ares library.
  
  This is a non-blocking and non-threaded resolver.  It may not produce the
  same results as the system resolver, but can be used for non-blocking
  resolution when threads cannot be used.
  
  ``pycares`` will not return a mix of ``AF_INET`` and ``AF_INET6`` when
  ``family`` is ``AF_UNSPEC``, so it is only recommended for use in
  ``AF_INET`` (i.e. IPv4).  This is the default for
  ``tornado.simple_httpclient``, but other libraries may default to
  ``AF_UNSPEC``.
  
  .. versionchanged:: 5.0
     The ``io_loop`` argument (deprecated since version 4.1) has been removed.
  
  .. deprecated:: 6.2
     This class is deprecated and will be removed in Tornado 7.0. Use the default
     thread-based resolver instead.
class_docstr_tok: ["Name","resolver","based","on","the","c-ares","library",".","This","is","a","non-blocking","and","non-threaded","resolver",".","It","may","not","produce","the","same","results","as","the","system","resolver",",","but","can","be","used","for","non-blocking","resolution","when","threads","can","not","be","used",".","``","pycares","``","will","not","return","a","mix","of","``","AF_INET","``","and","``","AF_INET6","``","when","``","family","``","is","``","AF_UNSPEC","``",",","so","it","is","only","recommended","for","use","in","``","AF_INET","``","(","i.e",".","IPv4",")",".","This","is","the","default","for","``","tornado.simple_httpclient","``",",","but","other","libraries","may","default","to","``","AF_UNSPEC","``",".","..","versionchanged",":",":","5.0","The","``","io_loop","``","argument","(","deprecated","since","version","4.1",")","has","been","removed",".","..","deprecated",":",":","6.2","This","class","is","deprecated","and","will","be","removed","in","Tornado","7.0",".","Use","the","default","thread-based","resolver","instead","."]
code: def _sock_state_cb(
      self, fd: int, readable: bool, writable: bool
  ) -> None:
      state = (IOLoop.READ if readable else 0) | (
          IOLoop.WRITE if writable else 0
      )
      if not state:
          self.io_loop.remove_handler(fd)
          del self.fds[fd]
      elif fd in self.fds:
          self.io_loop.update_handler(fd, state)
          self.fds[fd] = state
      else:
          self.io_loop.add_handler(fd, self._handle_events, state)
          self.fds[fd] = state
  
file_path: catboost/contrib/python/tornado/tornado-6/tornado/platform/caresresolver.py
imports: import pycares
  import socket
  from tornado.concurrent import Future
  from tornado import gen
  from tornado.ioloop import IOLoop
  from tornado.netutil import Resolver, is_valid_ip
  import typing
label_desc: Use image node_id 2 for calling the CaresResolver obj's underlying member method code with example usage: obj._sock_state_cb(fd, readable, writable) without return types