问题描述
scheduler 启动时尝试绑定端口 45762,但该端口落在 Windows 系统保留的动态端口范围内,被系统进程占用,导致绑定失败抛出 WinError 10013。
运行环境
- OS: Windows 10/11
- Python: 3.12
复现步骤
- 在 Windows 上执行
netsh int ipv4 show dynamicport tcp,查看动态端口起始值
- 若 45762 落在该范围内,scheduler 启动时会报错
- 启动 GenericAgent,日志中可观察到 WinError 10013
根因
reflect/scheduler.py 中硬编码了端口 45762 作为调度器的锁端口。Windows 默认动态端口从 49152 起,但管理员可通过 netsh 将起始值调低,导致 45762 被纳入动态分配范围并被系统进程占用,从而触发 WinError 10013(地址已被占用 / 权限被拒绝)。
建议修复
- 将端口改为可配置(环境变量或配置文件)
- 默认使用更安全的端口范围(如 19000-20000)
- 增加回退逻辑:端口占用时自动尝试下一个可用端口
- 或改用文件锁替代端口锁,避免端口依赖
问题描述
scheduler 启动时尝试绑定端口 45762,但该端口落在 Windows 系统保留的动态端口范围内,被系统进程占用,导致绑定失败抛出
WinError 10013。运行环境
复现步骤
netsh int ipv4 show dynamicport tcp,查看动态端口起始值根因
reflect/scheduler.py中硬编码了端口 45762 作为调度器的锁端口。Windows 默认动态端口从 49152 起,但管理员可通过netsh将起始值调低,导致 45762 被纳入动态分配范围并被系统进程占用,从而触发WinError 10013(地址已被占用 / 权限被拒绝)。建议修复