human
Solve the following python programming problem given the following code:
@contextlib.contextmanager
def transient_internet(resource_name, timeout=30.0, errnos=()):
assistant
#Here is the Python program you requested.

    """Return a context manager that raises ResourceDenied when various issues
    with the Internet connection manifest themselves as exceptions.
    """
    default_errnos = [('ECONNREFUSED', 111), ('ECONNRESET', 104), ('EHOSTUNREACH', 113), ('ENETUNREACH', 101), ('ETIMEDOUT', 110)]
    default_gai_errnos = [('EAI_NONAME', (-2)), ('EAI_NODATA', (-5))]
    denied = ResourceDenied(("Resource    '%s'    is    not    available" % resource_name))
    captured_errnos = errnos
    gai_errnos = []
    if (not captured_errnos):
        captured_errnos = [getattr(errno, name, num) for (name, num) in default_errnos]
        gai_errnos = [getattr(socket, name, num) for (name, num) in default_gai_errnos]
    def filter_error(err):
        n = getattr(err, 'errno', None)
        if (isinstance(err, socket.timeout) or (isinstance(err, socket.gaierror) and (n in gai_errnos)) or (n in captured_errnos)):
            if (not verbose):
                sys.stderr.write((denied.args[0] + '\n'))
            raise denied
    old_timeout = socket.getdefaulttimeout()
    try:
        if (timeout is not None):
            socket.setdefaulttimeout(timeout)
        (yield)
    except IOError as err:
        while True:
            a = err.args
            if ((len(a) >= 1) and isinstance(a[0], IOError)):
                err = a[0]
            elif ((len(a) >= 2) and isinstance(a[1], IOError)):
                err = a[1]
            else:
                break
        filter_error(err)
        raise
    finally:
        socket.setdefaulttimeout(old_timeout)