我认为这个问题并不新鲜:我有一个应该从X服务器(通过XCB)读取的线程和另一个用TCP连接的服务器,因此需要调用select。
令我困惑的是,当程序从select返回时,结果是X服务器链接中有数据,如果数据不足以进行XCB事件怎么办?在这种情况下,xcb_poll_for_event()应该返回NULL,但是当程序再次调用select时它不会阻塞,因为毕竟有一些数据,所以程序被困在“忙”等待状态。
这是一个有效的问题吗?我相信是因为每个XCB事件都由许多字节组成,服务器可能在发送过程中被中断。
答案 0 :(得分:0)
如何使用 setsockopt()为xcb fd设置 SO_RCVLOWAT 以及所需的XCB事件大小。现在,套接字的文件描述符只有在读取至少读取的数据量时才会选择为可读。这是我们在处理TCP服务器时使用的常规方法,虽然没有尝试使用XCB fd。