xcb_poll_for_event,请问这个函数returns怎么报错了?

xcb_poll_for_event, how does this function returns an error?

我阅读了关于 xcb_poll_for_event 的文档,它说函数

returns the next event or error from the server...

这是在我的系统上使用的原型:

xcb_generic_event_t* xcb_poll_for_event(xcb_connection_t* c)

问题很简单,如何判断return是不是错误,然后得到一些错误码?

我问是因为,据我了解,XCB 没有习惯将 return 指针“强制转换”为其他指针。 xcb_generic_event_t struct 确实有一个 response_type 字段,但没有关于该字段的文档。有人可以分享一个例子吗?

更新

x.org 网站上几乎没有关于在事件循环中处理错误的示例。关于示例状态:

For requests which have no reply (for example xcb_map_window), errors will be delivered to the event loop (you will receive an X11 event of type 0 when calling xcb_poll_for_event)

错误处理示例代码:

if (event->response_type == 0) {
 fprintf("Received X11 error %d\n", error->error_code);
 free(event);
 continue;
}

但是,这个 error 变量又是从哪里来的呢? 在例子的任何地方都不是declared/defined

与文档相关 link:xcb-requests

I ask because, as I understand, it is not a habit of XCB to "just cast" a return pointer to some other pointer.

是的,是的。对于错误和事件,你会得到一个指向某个通用结构的指针,然后你必须自己找出正确的类型并转换指针。错误有 response_type == 0 并且事件有一个数字准确说明它是哪种类型的事件(某些扩展除外,其中来自该扩展的所有事件都具有相同的 response_type 并且另一个字段包含“子类型”事件)。

因此,当您收到带有 response_type == 0 的事件时,将指针指向 xcb_generic_error_t*