BeyondDimension / BeyondDimension/SteamTools
🐛[BUG] IPC 启动超时后 Accelerator 仍监听 443,重试被自身进程阻塞
- Dominant language
- C#
- Stars
- 26.8k
- Forks
- 1.7k
- PR merge metrics
- No merged PRs in 30d
Description
## 请认真检查以下清单中的每一项
- [x] 已经搜索过,没有发现相同的 issue
- [x] 已经搜索过文档,没有发现相关内容
- [x] 使用的是当前官方版本(未替换及修改过安装目录程序文件)
### 🐛 描述
Windows 下偶发第一次点击“开始加速”时因 IPC 调用超时而提示启动失败,但 `Steam++.Accelerator.exe` 实际没有停止,随后成功监听 80/443 端口。
此时 UI 仍显示加速未启动。再次点击“开始加速”后,端口预检会将应用自己的 Accelerator 子进程识别为占用者,并提示:
> 加速服务启动失败,443 端口被 Steam++.Accelerator(PID) 占用。请关掉占用 443 端口的程序或者尝试使用系统代理模式
退出 Watt Toolkit 后重新启动可以恢复。
### 📷 复现步骤
此问题偶发,目前观察到的步骤为:
1. 启动 Watt Toolkit。
2. 在 Hosts 模式下第一次点击开始加速。
3. 首次启动提示失败,日志记录 `IpcInvokingTimeoutException`。
4. 再次点击开始加速。
5. 提示 443 端口被 `Steam++.Accelerator` 自身占用。
### 📄 日志信息
首次失败时主进程日志:
```text
2026-07-26 23:35:52.9216|Error|ProxyService|OnStartedShowToastReturnProxyStatus Error | dotnetCampus.Ipc.Exceptions.IpcInvokingTimeoutException: Exception of type 'dotnetCampus.Ipc.Exceptions.IpcInvokingTimeoutException' was thrown.
at dotnetCampus.Ipc.CompilerServices.GeneratedProxies.GeneratedIpcProxy`1.InvokeWithTimeoutAsync[T](MemberInvokingType callType, UInt64 memberId, String memberName, IGarmObject[] args, Int32 millisecondsTimeout, Boolean ignoreException, Object defaultReturn)
at dotnetCampus.Ipc.CompilerServices.GeneratedProxies.GeneratedIpcProxy`1.IpcInvokeAsync[T](MemberInvokingType callType, UInt64 memberId, String memberName, IGarmObject[] args, IpcMemberInfo info)
at BD.WTTS.Services.ProxyService.StartProxyServiceCoreAsync()
at BD.WTTS.Services.ProxyService.StartProxyServiceAsync()
```
首次失败后进程父子关系:
```text
PID PPID Process
29360 4200 Steam++.exe
21280 29360 Steam++.exe
30424 29360 Steam++.Accelerator.exe
```
其中第二个 `Steam++.exe` 是主进程启动的管理员辅助进程;关键是 Accelerator 子进程仍存活。
监听端口:
```text
LocalAddress LocalPort OwningProcess State
0.0.0.0 80 30424 Listen
0.0.0.0 443 30424 Listen
```
### 🔎 初步分析
- `ProxyService.StartProxyServiceCoreAsync()` 调用子进程服务时发生 `IpcInvokingTimeoutException`;
- 主进程捕获异常后将 UI 状态保持为“未启动”,但远端调用并未被可靠取消或回滚;
- `Steam++.Accelerator.exe` 随后继续运行并成功监听 80/443;
- 再次启动时,`SocketHelper.IsUsePort(..., 443)` 检测到端口已占用,并将应用自己的 Accelerator 子进程作为冲突进程报告。
具体超时发生在证书检查、IPC 嵌套调用还是代理初始化阶段,目前无法仅凭现有日志确定。
### 🖼 截图
首次启动失败后,再次点击加速时的 443 端口占用提示:
事发时 Steam++ 与 Accelerator 的进程父子关系:
Accelerator 子进程实际监听 80/443 端口:
主进程日志中的 `IpcInvokingTimeoutException`:
### 🚑 其他信息
- 处理器体系结构:x64
- 系统:Windows 11 家庭版 中文版,10.0.26100
- 下载渠道:官方 Windows 安装包
- 程序版本:ProductVersion `3.1.0`,FileVersion `3.1.2025.0`
- 加速模式:Hosts
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing ProxyService.StartProxyServiceCoreAsync around the reported IpcInvokingTimeoutException, then inspect how the Accelerator child process is tracked and how SocketHelper.IsUsePort checks port 443. Reproduce the timeout and retry sequence on Windows, and verify that a failed start does not leave Accelerator listening on ports 80/443 or report its own process as the conflict.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- desktop, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100