需要帮助理解X11协议错误

3
我刚开始从头构建一个最小化的X服务器,用于Windows。随着我不断地开发和学习协议,在处理错误和瑕疵时,我肯定会遇到各种问题。
以下是客户端报告的错误示例:
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 Error”代码在哪里定义?

失败请求和输出流的序列号是什么?它们是否应该相互匹配?通过输出流,是指发送到xserver还是发送到xclient的内容?这与序列号有关吗?


你确定你指的是“X服务器”而不是“X客户端”?服务器是格式化显示的程序,而客户端是发出请求的程序。 - James Anderson
是的。虽然我正在创建一个X服务器,但是客户端报告错误消息。 - Jason Champion
2个回答

4

在libX11中的XlibInt.c文件的_XPrintDefaultError()函数中,您可以找到此错误消息。

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

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

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

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

如果想编写X服务器,我认为您需要深入研究源代码-文档不够精确或详尽...实际上,您可以使用一些现有的代码,许可证非常自由。


到目前为止,我一直在使用1992年的“手册0”进行工作,但你可能是对的,需要在某个时候深入代码。 - Jason Champion
是的,那本旧手册已经相当过时了。许多 X 服务器功能已被现代替代品淘汰。 - Havoc P

3
错误代码在X协议规范的章节中定义,该章节称为Errors。错误响应中的其他项目在第一章Protocol Formats中定义。错误消息的实际值和布局可以在附录协议编码Errors部分中找到
从该消息的内容来看,似乎您正在发送一个由零填充的响应,而客户端并不希望通过协议发送响应 - 除非它们失败,否则大多数对X服务器的请求都不应该得到响应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接