Improve connection status determination logic

This commit is contained in:
codeking 2025-11-23 15:24:53 +01:00
parent b4f4ef986c
commit 089f5ee597

View file

@ -15,11 +15,12 @@ from pathlib import Path
from subprocess import CalledProcessError from subprocess import CalledProcessError
from typing import Union, Optional, Any from typing import Union, Optional, Any
import os import os
import random
import re import re
import requests
import shutil import shutil
import socket import socket
import subprocess import subprocess
import sys
import tempfile import tempfile
import time import time
@ -430,14 +431,11 @@ class ConnectionController:
return task_output return task_output
@staticmethod @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] request_urls = [Constants.PING_URL]
timeout = float(timeout) command_name = os.path.basename(sys.executable)
proxies = None
if port_number is not None:
proxies = ConnectionController.get_proxies(port_number)
if os.environ.get('PING_URL') is None: if os.environ.get('PING_URL') is None:
@ -447,14 +445,28 @@ class ConnectionController:
'https://hc3.hydraveil.net' '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: for request_url in request_urls:
command = [
sys.executable, '-u', '-c', 'import sys; from requests import get\n'
f'response = get(\'{request_url}\', timeout={timeout}, proxies={proxies})\n'
'if response.status_code == 200:\n'
' print((response.text or \'\')[:15])\n'
'else:\n'
f' raise subprocess.CalledProcessError(1, {command_name})\n'
]
try: try:
requests.get(request_url, timeout=timeout, proxies=proxies) _response = subprocess.check_output(command, text=True, timeout=timeout)
return None return None
except requests.exceptions.RequestException: except (subprocess.CalledProcessError, subprocess.TimeoutExpired):
pass pass
raise ConnectionError('The connection could not be established.') raise ConnectionError('The connection could not be established.')