aboutsummaryrefslogtreecommitdiffstats
path: root/python/gevent/resolver/blocking.py
blob: 84cbd9c92fc53911872b800172709060ad1a0f45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Copyright (c) 2018  gevent contributors. See LICENSE for details.

import _socket

class Resolver(object):
    """
    A resolver that directly uses the system's resolver functions.

    .. caution::

        This resolver is *not* cooperative.

    This resolver has the lowest overhead of any resolver and
    typically approaches the speed of the unmodified :mod:`socket`
    functions. However, it is not cooperative, so if name resolution
    blocks, the entire thread and all its greenlets will be blocked.

    This can be useful during debugging, or it may be a good choice if
    your operating system provides a good caching resolver (such as
    macOS's Directory Services) that is usually very fast and
    functionally non-blocking.

    .. versionchanged:: 1.3a2
       This was previously undocumented and existed in :mod:`gevent.socket`.

    """

    def __init__(self, hub=None):
        pass

    def close(self):
        pass

    for method in (
            'gethostbyname',
            'gethostbyname_ex',
            'getaddrinfo',
            'gethostbyaddr',
            'getnameinfo'
    ):
        locals()[method] = staticmethod(getattr(_socket, method))