tls 域包 —— TLS 门面(T2;P3-C,BIO-over-hybrid)
mbedtls(vendored vendor/tls/mbedtls)之上的加工层:TLS 是 net 句柄之上的
加工,复用 net 能力,不新增能力键。消费形态 = use tls.{...}。
布局
tls/tls.ct 门面:握手/读写/close + ALPN/SNI + tls_last_error(参考页 tls.md)
tls/bind.ct extern 窄桥(#[trusted];用户不接触,无参考页)
tls/c_src/ C 胶水(ctron_tls.c;BIO 桥接 net 垫片)
参考页:tls.md(tls_client / tls_server / tls_handshake / tls_set_alpn / tls_set_hostname / tls_read / tls_write / tls_close / tls_alpn_selected_s / tls_last_error)。
口径与坑位(写码前必读)
- 句柄
TlsConn { var ctx: I64 }(ctx < 0 视为已关闭)。tls_close后须conn.ctx = -1(同 net fd=-1 纪律)。 - fd 本体归 net 层所有:TLS close 绝不关 fd;两句柄 Drop 先后无关 (ctron_tls.c 文件头「Drop 序」注)。
- 握手序:
tls_client/tls_server建句柄(不握手)→tls_set_alpn/tls_set_hostname(可选)→tls_handshake。ALPN 必须握手前设;握手阻塞 (协程上经 net 垫片停车),门面不设超时。 - 读返回:0 = eof(对端 close_notify),<0 = err(超时 = SSL_TIMEOUT);
单次
tls_read至多搬运 4096 字节(net CT_CHUNK 同值)。 - 本模块不 import std.net(加载器无 pop 的栈式查环会把 tls→net + 消费方
use net 判成菱形 E5020,实证);
StdNet形参按名经 use 文本合并解析, 消费方use net.{Net_probe}即供给。 - 句柄出参 = 直接返回 ctx 指针(<0 = 失败,符号即判据)——不用 net 的 rc+Box[Box64] 通道(冻结 C 面口径)。
验收:域包消费测试 headless 绿;行为面随服务器泳道(P3-C)。