郑博文
f119300a57
feat(agent): 串行多会话——会话结束不再退出进程
问题(阶段 2 的硬阻塞)
accept() 只接一次,会话结束进程退出。阶段 1 一次验收看不出来,
但阶段 2 要反复测试输入,每测一次都要手动重启被控端。
(即公共阻碍清单里的 P5,此前判断为「只影响调试效率」,
现在它阻塞迭代,提前做掉。)
改动
1. main:会话体抽成 serve_session(),外层 accept 循环。
会话失败(含认证失败)只记日志不退出进程。
明确不做并发多会话:DXGI Desktop Duplication 每个输出仅允许一个
活动实例,第二个 DuplicateOutput 会让第一个收到 ACCESS_LOST。
2. 认证失败路径补 conn.closed() 等待(agent-core 已有同款修复,
此处同源补齐 = 手册 §6.1 第 1 条):否则客户端只看到 connection
lost 而不是 AuthFail。
3. capture 循环加 tx.receiver_count()==0 守卫。
只靠「send 失败退出」不够——桌面完全静止时那个分支根本不发送,
线程会永远持有 duplication,下一个会话的 DuplicateOutput 直接失败
(表现为新会话黑屏)。agent-core 同源修复。
4. 会话收尾:finish 流 + drop 接收端 + 等采集线程退出(2s 超时)后才
返回,调用方才 accept 下一个连接。
验证(连续两个会话,中间不重启 agent)
会话1:收到帧 40/40,结论 ✅
agent 存活:✅
会话2:收到帧 40/40,结论 ✅
日志:session closed -> waiting for next connection -> peer connected
-> auth ok;stderr 有 [capture] no receiver, stop 证明线程真退出