我认为这个问题并不新鲜:我有一个线程应该从一个 X 服务器(通过 XCB)和另一个与 TCP 连接的服务器读取,所以需要调用 select。
令我困惑的是,当程序从select返回时,发现X服务器链接中有数据,如果数据不足以进行XCB事件怎么办?这种情况下xcb_poll_for_event()应该返回NULL,但是当程序再次调用select时并没有阻塞,因为毕竟还有一些数据,所以程序陷入了“忙”等待状态。
这是一个合理的担忧吗?我相信是这样,因为每个 XCB 事件都是由许多字节组成的,服务器在发送过程中可能会中断。
最佳答案
如何使用 setsockopt() 为具有 XCB 事件所需大小的 xcb fd 设置 SO_RCVLOWAT。现在,套接字的文件描述符只会在至少读取该数量的数据时才选择为可读。这是我们在处理 TCP 服务器时使用的正常方法,不过还没有在 XCB fd 上尝试过。
关于c - 让 select 和 xcb_poll_for_event 一起工作的安全方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41540191/