From 7a3f2e7596c031a618a782e689d418a045b1412a Mon Sep 17 00:00:00 2001 From: codeking Date: Sun, 23 Nov 2025 15:24:53 +0100 Subject: [PATCH] Improve connection status determination logic --- core/controllers/ConnectionController.py | 30 +++++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/core/controllers/ConnectionController.py b/core/controllers/ConnectionController.py index 2eec43a..bfd182b 100644 --- a/core/controllers/ConnectionController.py +++ b/core/controllers/ConnectionController.py @@ -15,11 +15,12 @@ from pathlib import Path from subprocess import CalledProcessError from typing import Union, Optional, Any import os +import random import re -import requests import shutil import socket import subprocess +import sys import tempfile import time @@ -430,14 +431,11 @@ class ConnectionController: return task_output @staticmethod - def __test_connection(port_number: Optional[int] = None, timeout: float = 10.0): + def __test_connection(port_number: Optional[int] = None, timeout: float = 4.0): - proxies = None request_urls = [Constants.PING_URL] - timeout = float(timeout) - - if port_number is not None: - proxies = ConnectionController.get_proxies(port_number) + command_name = os.path.basename(sys.executable) + proxies = None if os.environ.get('PING_URL') is None: @@ -447,14 +445,28 @@ class ConnectionController: 'https://hc3.hydraveil.net' ]) + random.shuffle(request_urls) + + if port_number is not None: + proxies = ConnectionController.get_proxies(port_number) + for request_url in request_urls: + command = [ + sys.executable, '-u', '-c', 'import requests, sys\n' + 'try:\n' + f' response = requests.get(\'{request_url}\', timeout={timeout}, proxies={proxies})\n' + ' response.raise_for_status(); print((response.text or \'\')[:15])\n' + 'except requests.exceptions.RequestException:\n' + ' sys.exit(1)' + ] + try: - requests.get(request_url, timeout=timeout, proxies=proxies) + _response = subprocess.check_output(command, text=True, timeout=timeout) return None - except requests.exceptions.RequestException: + except (subprocess.CalledProcessError, subprocess.TimeoutExpired): pass raise ConnectionError('The connection could not be established.')