c - 让 select 和 xcb_poll_for_event 一起工作的安全方法?

标签 c select polling xcb

我认为这个问题并不新鲜:我有一个线程应该从一个 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/

相关文章:

C程序删除字符串中所有不必要的空格

c - 如何在C中打印数字符号?

c - 将 *array 分配给指针

c# - 如何读取GC420t打印机的状态?

javascript - 为什么 ajax 轮询会随着时间的推移增加 CPU 使用率?

c - 如何在c中复制二进制文件

jquery - jqTransform Select 在 Fancybox 中不起作用

javascript - Angularjs - 设置不带 ng-options 的 select 的默认值

sql - 根据列的 N 值复制行的 Select 语句

用于轮询工作线程任务完成状态的C文件描述符