2

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

4

2 回答 2

4

grep 源...

在 libX11, XlibInt.c, _XPrintDefaultError() 你可以找到这个错误信息。

打印的大部分内容来自错误事件,这可能是由您的服务器发送的。

当前序列号是 dpy->request,位于 Xlibint.h 中:

 unsigned long request;  /* sequence number of last request. */

即发送的最后一个 X 请求。这可能与导致错误的请求相同,也可能不同。(event->serial 应该是导致错误的请求,但您的服务器可能没有正确处理)

为了希望编写 X 服务器,我认为您将深入研究源代码 - 文档不够精确或不够彻底......真的,您不妨使用一些现有代码,许可证足够自由.

于 2010-12-16T15:57:11.350 回答
3

错误代码在称为Errors的 X 协议规范章节中定义。错误响应中的其他项目在第一章协议格式中定义。错误消息的实际值和布局可在协议编码附录的错误部分中找到。

尽管从该消息的内容来看,当客户端不期望响应时,您似乎正在发送一个填充为零的响应 - 大多数对 X 服务器的请求不应通过协议获得响应,除非它们失败。

于 2010-12-16T04:16:18.523 回答