'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.'

def _check(self, sock_info):

    idle_time_seconds = (_time() - sock_info.last_checkin)
    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
