5 |
5 |
6 """ |
6 """ |
7 Module implementing a debug client base class. |
7 Module implementing a debug client base class. |
8 """ |
8 """ |
9 |
9 |
|
10 import atexit |
|
11 import codecs |
|
12 import codeop |
|
13 import contextlib |
|
14 import fnmatch |
|
15 import json |
|
16 import os |
|
17 import re |
|
18 import select |
|
19 import signal |
|
20 import socket |
10 import sys |
21 import sys |
11 import socket |
|
12 import select |
|
13 import codeop |
|
14 import codecs |
|
15 import traceback |
22 import traceback |
16 import os |
|
17 import json |
|
18 import re |
|
19 import atexit |
|
20 import signal |
|
21 import time |
|
22 import types |
23 import types |
23 import fnmatch |
|
24 import contextlib |
|
25 |
24 |
26 import DebugClientCapabilities |
25 import DebugClientCapabilities |
27 import DebugVariables |
26 import DebugVariables |
28 from DebugBase import setRecursionLimit, printerr # __IGNORE_WARNING__ |
27 from DebugBase import setRecursionLimit, printerr # __IGNORE_WARNING__ |
29 from AsyncFile import AsyncFile, AsyncPendingWrite |
28 from AsyncFile import AsyncFile, AsyncPendingWrite |
2045 """ |
2044 """ |
2046 try: |
2045 try: |
2047 host, version = host.split("@@") |
2046 host, version = host.split("@@") |
2048 except ValueError: |
2047 except ValueError: |
2049 version = 'v4' |
2048 version = 'v4' |
2050 family = socket.AF_INET if version == 'v4' else socket.AF_INET6 |
2049 |
2051 |
2050 family = ( |
2052 retryCount = 0 |
2051 0 |
2053 while retryCount < 20: |
2052 if version.startswith("i") else |
2054 try: |
2053 (socket.AF_INET if version == 'v4' else socket.AF_INET6) |
2055 addrinfo = socket.getaddrinfo( |
2054 ) |
2056 host, None, family, socket.SOCK_STREAM) |
2055 |
2057 return addrinfo[0][4][0] |
2056 with contextlib.suppress(OSError): |
2058 except Exception: |
2057 addrinfo = socket.getaddrinfo( |
2059 retryCount += 1 |
2058 host, None, family, socket.SOCK_STREAM) |
2060 family = (socket.AF_INET if family == socket.AF_INET6 else |
2059 return addrinfo[0][4][0] |
2061 socket.AF_INET6 |
2060 |
2062 ) |
|
2063 if retryCount % 2 == 0: |
|
2064 time.sleep(3) |
|
2065 return None |
2061 return None |
2066 |
2062 |
2067 def main(self): |
2063 def main(self): |
2068 """ |
2064 """ |
2069 Public method implementing the main method. |
2065 Public method implementing the main method. |