[Xcb] Foreign file descriptors

Russell Shaw rjshaw at netspace.net.au
Wed Sep 27 09:03:58 PDT 2006

Jamey Sharp wrote:
> On Wed, Sep 27, 2006 at 02:39:01PM +1000, Russell Shaw wrote:
> Hi Russell!
>>To monitor external file descriptors for things like receiving
>>characters on a serial port, xlib doesn't seem to have any facility
>>for that, so your application remains stuck in XNextEvent().
>>Does xcb have a way around this?
> No, that's outside XCB's scope. But with both Xlib and XCB, you can get
> the file descriptor of the X connection and use select(2) or poll(2).
> This is somewhat non-trivial to get right, though. I've been meaning to
> work out what the application has to do to get this right, but haven't
> gotten around to it yet.

I tried:

   while(1) {
       if(fd_is_X_or_X_IM_and_is_ready_for_reading) {
           XNextEvent(...);  /* should not block */
       else if(fd_is_non_X) {

However, it didn't work because inside XNextEvent() (_XReadEvents(dpy)),
events are held in queues, and adding XSync() and XFlush() around it didn't

However, i could use _XRegisterInternalConnection() which adds your own IM file
descriptors and callbacks, but there is no public X function for that unless you
use XlibInt.h directly.

> Of course, what we actually recommend is using threads. That may be a
> bad idea with Xlib, but XCB is designed to support threads transparently.

Ok. Threads are something i'll think about:)

More information about the Xcb mailing list