需要帮助了解X11协议错误

时间:2010-12-16 02:05:21

标签: x11 xserver

我刚刚开始从头开始为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的内容?这与序列号有关吗?

2 个答案:

答案 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服务器进行编码我认为你会深入挖掘源代码 - 文档不够精确或不够彻底......真的,你可以使用一些现有的代码,许可证很自由了。