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 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 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:
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.')