我刚刚开始从头开始为Windows构建一个最小的X服务器。在我完成它的过程中,我确信在遇到错误并了解协议时会遇到各种错误和故障。
以下是客户打印出的错误示例:
X Error of failed request: 0
Major opcode of failed request: 0 ()
Serial number of failed request: 0
Current serial number in output stream: 3
主要的操作码含义似乎很明显,但是“X错误”代码定义在哪里?
失败的请求和输出流的序列号是什么?这些应该相互匹配吗?通过输出流,这是指发送到xserver的内容还是发送到xclient的内容?这与序列号有关吗?
答案 0 :(得分:3)
错误代码在名为 Errors 的X协议规范章节中定义。 错误响应中的其他项目在第一章 Protocol Formats 中定义。错误消息的实际值和布局可在Errors section of the Protocol Encoding appendix。
中找到从该消息的内容看来,当客户端不期待响应时,您正在发送一个填充零的响应 - 大多数对X服务器的请求都不应该通过协议发回响应,除非它们失败
答案 1 :(得分:2)
grep the source ...
在libX11,XlibInt.c,_XPrintDefaultError()中,您可以找到此错误消息。
大部分内容来自错误事件,可能是由您的服务器发送的。
当前序列是xlibint.h中的dpy->请求:
unsigned long request; /* sequence number of last request. */
即。发送的最后一个X请求。这可能与导致错误的请求相同或不同。 (event-> serial应该是导致错误的请求,但是你的服务器可能没有这个权利)
希望对X服务器进行编码我认为你会深入挖掘源代码 - 文档不够精确或不够彻底......真的,你可以使用一些现有的代码,许可证很自由了。