Module pywander.web

Functions

def get_random_available_port(min_port: int = 1024, max_port: int = 65535, max_attempts: int = 10) ‑> int
Expand source code
def get_random_available_port(min_port: int = 1024, max_port: int = 65535, max_attempts: int = 10) -> int:
    """
    生成随机可用端口

    参数:
        min_port (int): 最小端口号 (默认: 1024)
        max_port (int): 最大端口号 (默认: 65535)
        max_attempts (int): 最大尝试次数 (默认: 100)

    返回:
        int: 可用的随机端口号,如果没有找到则返回0
    """
    if min_port < 0 or max_port > 65535 or min_port > max_port:
        raise ValueError("端口号范围无效")

    for _ in range(max_attempts):
        # 生成随机端口号
        port = random.randint(min_port, max_port)
        # 检查端口是否可用
        if is_port_available(port):
            return port

    return 0  # 返回0表示未能找到可用端口

生成随机可用端口

参数: min_port (int): 最小端口号 (默认: 1024) max_port (int): 最大端口号 (默认: 65535) max_attempts (int): 最大尝试次数 (默认: 100)

返回: int: 可用的随机端口号,如果没有找到则返回0

def is_port_available(port: int) ‑> bool
Expand source code
def is_port_available(port: int) -> bool:
    """
    检查本地端口是否可用

    参数:
        port (int): 要检查的端口号

    返回:
        bool: 如果端口可用返回True,否则返回False
    """
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            # 设置套接字选项,允许地址重用
            s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            # 尝试绑定端口
            s.bind(('localhost', port))
            # 尝试监听端口
            s.listen(1)
        return True
    except OSError:
        return False

检查本地端口是否可用

参数: port (int): 要检查的端口号

返回: bool: 如果端口可用返回True,否则返回False