5 组结构体 · 字段核对自 src/sdk/xsbase.h

结构体参考

XServer 只透传视图与信息结构,不包装对象模型。除 ReloadResult 外,下列结构体均为借用视图:由宿主拥有,回调内有效,字段不可修改。

ABI 纪律

结构体即 ABI

布局冻结:新字段只许尾部追加、永不重排改名(xsbase.h 注释明言)。脚本按字段名访问,跨版本二进制兼容。

视图不修改

XS_HostInfo / XS_ServerInfo / XS_HttpReq / XS_StreamConn 均为宿主拥有的视图——读字段安全,写字段未定义。

生命周期

host 视图由其 server lease 保护;HttpReq / StreamConn 视图回调内有效。保存需 Retain(拓扑)或拷贝(请求)。

XS_HostInfo(主机信息,15 字段)

字段类型说明
Enabledbool是否启用
Nameconst char*主机名(server 内唯一)
Hostconst char*域名绑定(分号分隔);http/ws 路由键
Pathconst char*资源 / 脚本根(绝对路径)
DevLangconst char*c / static / 应用自定
DevFileconst char*脚本入口路径
TlsCA / TlsCert / TlsKeyconst char*host 级证书路径 → SNI 选择器数据源
StateXS_RunState运行状态(见 枚举参考)
Runtimevoid*本代脚本运行时(不透明,勿解引用)
ServerXS_ServerInfo*反向指针:从一个 host 摸到整个拓扑
Customxvalue*本 host 非预设字段的全部内容
DevInc / DevLibconst char*脚本 include / 库目录(尾部追加字段)
RuntimeLockvoid*宿主侧代切换锁(不透明;尾部追加字段)

XS_ServerInfo(服务信息,20 字段)

字段类型说明
Enabledbool是否启用
Classconst char*"http" | "ws" | "tcp" | "udp" | "custom" | "app"
Nameconst char*全局唯一名(xsServerFind 键)
IP / Portconst char* / uint16明文监听端点
TLS / PortTLS / IPTLSbool / uint16 / const char*TLS 端点;IPTLS 缺省复用 IP
Backloguint32直通 xrt 监听配置
RecvLimitsize_t流读上限(直通 xrt)
DefaultHostXS_HostInfo*恒存在;vhost 未命中时回落
HostCount / Hostsuint32 / XS_HostInfo**vhost 列表(不含 DefaultHost)
StateXS_RunState运行状态
Runtimevoid*服务级运行时(不透明)
Enginestruct xnetengine*进程级引擎(custom 类应用的起点)
Customxvalue*服务级非预设字段
Generationvoid*服务代生命周期拥有者(尾部追加)
ConfigOwnervoid*动态配置快照所有者(尾部追加)
PortBounduint16实际监听端口(尾部追加):固定端口 = Port;app 类 port:0 自动分配 = OS 分配值(同时回写 Port,端点标识与脚本视图一致);0 = 尚未绑定

XS_HttpReq(HTTP 请求视图,6 字段)

typedef struct { xnetstream* tcp; /* 与 tls 二选一非空 */ xtlsstream* tls; /* 可直接使用 xrt 全套流/发送 API */ const xhttp1head* head; /* 含 MethodCode;字段视图回调内有效 */ xhttp1body* body; /* 分帧状态机:定长 / chunked / 关闭 */ const XS_HostInfo* host; XS_ServerInfo* server; } XS_HttpReq;

head 的原始方法与字段视图只在回调内有效(ring buffer 会被复用);body 由 xrtHttp1BodyRead 增量消费。xrt 原生结构(xhttp1head / xhttp1body)的字段见 xrt · http1 参考。

XS_StreamConn(TCP 连接视图,2 字段)

typedef struct XS_StreamConn { xnetstream* tcp; /* 明文 TCP 传输层 */ xtlsstream* tls; /* TLS 传输层(tcps)*/ } XS_StreamConn;

二选一非空:按非空一侧使用对应发送 API;tcps 下禁止绕过 tls 直写 tcp。连接生命周期由宿主驱动持有(Accept 接管 → 注册表 → Close 析构)——应用不负责 Destroy。

XS_ReloadResult(重载结果,5 字段)

字段类型说明
IdXS_ReloadId (uint64)意图 ID(Submit 返回值)
StateXS_ReloadState七态之一(见 枚举参考)
Revisionuint64不可变输入快照的内容指纹;无配置输入时含脚本指纹
Target[160]char[]目标描述(server / host 名)
Message[256]char[]结果消息(失败原因)

这是唯一由应用持有存储的结果结构(栈上接收出参);查询见 xsReloadQuery。