(addr, key, load_library)
| 288 | |
| 289 | |
| 290 | def _connect_proxy_loop(addr, key, load_library): |
| 291 | key = "server:" + key |
| 292 | retry_count = 0 |
| 293 | max_retry = 5 |
| 294 | retry_period = 5 |
| 295 | while True: |
| 296 | try: |
| 297 | sock = socket.socket(base.get_addr_family(addr), socket.SOCK_STREAM) |
| 298 | sock.connect(addr) |
| 299 | sock.sendall(struct.pack("<i", base.RPC_MAGIC)) |
| 300 | sock.sendall(struct.pack("<i", len(key))) |
| 301 | sock.sendall(key.encode("utf-8")) |
| 302 | magic = struct.unpack("<i", base.recvall(sock, 4))[0] |
| 303 | if magic == base.RPC_CODE_DUPLICATE: |
| 304 | raise RuntimeError(f"key: {key} has already been used in proxy") |
| 305 | |
| 306 | if magic == base.RPC_CODE_MISMATCH: |
| 307 | logger.warning("RPCProxy do not have matching client key %s", key) |
| 308 | elif magic != base.RPC_CODE_SUCCESS: |
| 309 | raise RuntimeError(f"{addr!s} is not RPC Proxy") |
| 310 | keylen = struct.unpack("<i", base.recvall(sock, 4))[0] |
| 311 | remote_key = (base.recvall(sock, keylen)).decode("utf-8") |
| 312 | |
| 313 | _serving(sock, addr, _parse_server_opt(remote_key.split()[1:]), load_library) |
| 314 | retry_count = 0 |
| 315 | except OSError as err: |
| 316 | retry_count += 1 |
| 317 | logger.warning("Error encountered %s, retry in %g sec", str(err), retry_period) |
| 318 | if retry_count > max_retry: |
| 319 | raise RuntimeError(f"Maximum retry error: last error: {err!s}") |
| 320 | time.sleep(retry_period) |
| 321 | |
| 322 | |
| 323 | class PopenRPCServerState: |
nothing calls this directly
no test coverage detected
searching dependent graphs…