Skip to content

feat(net): uvcpp_udp_server 支持外部循环(#59) - #60

Merged
Antruly merged 1 commit into
masterfrom
feat/udp-server-external-loop
Oct 28, 2026
Merged

Antruly merged 1 commit into
masterfrom
feat/udp-server-external-loop

Conversation

@Antruly

@Antruly Antruly commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Closes #59

改了什么

uvcpp_udp_server 新增 explicit uvcpp_udp_server(uvcpp_loop*),语义与
uvcpp_tcp_server(uvcpp_loop*) / uvcpp_quic_server 对齐:

  • 只认下循环、不拥有它;析构时不关、不删外部循环(有界泵只在本对象拥有循环时跑);
  • stop() 仍只关本端点的句柄,不停循环;
  • stop_loop() 在外部模式下是空操作(头注释写明)。

用途:在 uvcpp_web_app 所在循环上再收一个 UDP 端点(中继数据面),回调与
WS/TCP/QUIC 连接同循环,不用再退回 uvcpp_udp + uvcpp_udp_send 手管生命周期。

判据

新增 tests/functional/udp_server_external_loop_func.cpp:外部循环用栈对象
(若被 delete 会当场崩),断言

  • get_loop() 返回传进去的指针,回调由调用方 run() 派发;
  • stop() 之后同一条循环上第二个端点仍能收发(循环没被停);
  • stop_loop() 之后第一轮 UV_RUN_NOWAIT 仍派发(多给几轮的话停与不停都绿,判据会空转)。

变异验证:去掉构造里的 owns_loop_ = false;,该用例以 double free or corruption (out) 崩溃。

其它

被插行撞飞的两处文档引用(benchmark.md、net-guide.md → uvcpp_udp_server.cpp)后移 12 行,
锁文件刷新;check_doc_lines / check_docs / 版本串全绿。本机 build-full 上
udp_server_external_loop_func / udp_server_func / udp_close_token_func 全过。

@Antruly
Antruly force-pushed the feat/udp-server-external-loop branch 2 times, most recently from 551d819 to 31099ea Compare October 28, 2026 19:40
与 `uvcpp_tcp_server(uvcpp_loop*)` / `uvcpp_quic_server` 对齐:新增
`explicit uvcpp_udp_server(uvcpp_loop*)`,只认下循环、不拥有它 ——
析构不关不删,`stop_loop()` 在外部模式下是空操作,`stop()` 仍只关本端点的
句柄。用途:在 `uvcpp_web_app` 所在循环上再收一个 UDP 端点(中继数据面),
回调与 WS/TCP/QUIC 连接同循环,避免跨线程。

新增 `tests/functional/udp_server_external_loop_func.cpp`:外部循环用**栈对象**
(真被 delete 会当场崩),断言回调在调用方的循环上派发、stop() 之后同一循环上
第二个端点仍能收发、stop_loop() 之后第一轮 NOWAIT 仍派发。变异验证:去掉
`owns_loop_ = false;` 该用例以 "double free or corruption (out)" 崩溃。

被插行撞飞的两处文档引用跟着后移(udp_server.cpp +12),锁文件刷新。
@Antruly
Antruly force-pushed the feat/udp-server-external-loop branch from 31099ea to 48b8b60 Compare October 28, 2026 20:13
@Antruly
Antruly merged commit ec404fa into master Oct 28, 2026
58 of 61 checks passed
@Antruly
Antruly deleted the feat/udp-server-external-loop branch October 28, 2026 21:06
Antruly added a commit that referenced this pull request Oct 28, 2026
PR #60 的分支上为了本地构建在图区里建了 `_local_deps -> /home/zwy/...` 的符号
链接,提交时被 `git add -A` 带了进去(绝对路径,换台机器就是死链)。从索引里
删掉,并把 `_local_deps/` 加进 `.gitignore` —— 它是各机自己准备的依赖源码树,
不是仓库内容。
Antruly added a commit that referenced this pull request Oct 29, 2026
- 版本头 PATCH 1;两版 README 的徽章与 Version 行同步,"最新版本"改为 v1.9.1。
- CHANGELOG:三条主题条目(WebSocket 语义 / 横向扩展 / TLS 与网络)+ 新增
  v1.9.1 小节;当前源码树与 tag 清单同步。
- RELEASE.md:新增「v1.9.1 重点」,破坏性为**无**(只新增 API,C ABI 仍为 1)。

含自 v1.9.0 以来的三笔:#65(h3/h2 WS 帧回调里析构会话后的 UAF)、
#60(`uvcpp_udp_server(uvcpp_loop*)`,#59)、#57(五个 set_ssl_context 入口的
生命周期文档,issue #56),以及 `_local_deps` 误提交链接的清理。

本地:build-all 162/162、build-h3 120/120、build-default 60/60;文档门禁全绿;
release_notes.py --tag v1.9.1 能切出正文。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(net): uvcpp_udp_server 支持外部循环(与 tcp/quic server 对齐)

1 participant