code: def _check(self, sock_info):
          
          # How long since socket was last checked in.
          idle_time_seconds = _time() - sock_info.last_checkin
          # If socket is idle, open a new one.
          if (self.opts.max_idle_time_ms is not None and
                  idle_time_seconds * 1000 > self.opts.max_idle_time_ms):
              sock_info.close()
              return self.connect()
  
          if (self._check_interval_seconds is not None and (
                  0 == self._check_interval_seconds or
                  idle_time_seconds > self._check_interval_seconds)):
              if self.socket_checker.socket_closed(sock_info.sock):
                  sock_info.close()
                  return self.connect()
  
          return sock_info
docs: This side-effecty function checks if this socket has been idle for
          for longer than the max idle time, or if the socket has been closed by
          some external network error, and if so, attempts to create a new
          socket. If this connection attempt fails we raise the
          ConnectionFailure.
  
          Checking sockets lets us avoid seeing *some*
          :class:`~pymongo.errors.AutoReconnect` exceptions on server
          hiccups, etc. We only check if the socket was closed by an external
          error if it has been > 1 second since the socket was checked into the
          pool, to keep performance reasonable - we can't avoid AutoReconnects
          completely anyway.