Skip to content

feat(socks5): report session end with byte counters and duration #46

Closed

Description

@Antruly

背景

uvscope 的 SOCKS5 服务端页面目前只能显示“命令是否建立”,无法显示字节数、连接时长和关闭原因。原因是 uvcpp_socks5_server 只在命令结果确定时回调一次:

  • src/net/uvcpp_socks5_server.h:114 的 uvcpp_socks5_session_info 只有 command / target / peer / status;
  • listen(on_session) 的说明写明“在每条会话命令结果确定时调一次”;
  • 没有会话结束回调,也没有累计字节。

uvscope 已在界面上明确标注这部分不可用,但 S5 的原始验收包含“来源、目标、字节数、失败原因、连接时长”。

建议

  1. 增加可选的会话结束回调,例如 on_session_end(const uvcpp_socks5_session_info& info, const uvcpp_socks5_session_stats& stats)。
  2. stats 至少包含:
    • 客户端 → 目标(或反向)的字节数,两个方向分开;
    • UDP 关联的数据报数量;
    • 建立时间、结束时间/时长;
    • 结束原因或 libuv 错误码。
  3. 回调恰好一次:对端关闭、读错误、服务端 close()、握手失败都要覆盖;拒绝的握手是否回调需要明确文档化。
  4. 回调所在循环与线程模型写清楚;不要在服务端管理锁里回调用户代码。

验收

  • CONNECT 回显:两个方向的字节数与实际一致;
  • BIND:第二次应答后开始计数,关闭时回调一次;
  • UDP ASSOCIATE:数据报数量与字节数可查;
  • 服务端停止时,所有活动会话都收到结束回调。

建议进入 1.8.2。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions