让select和xcb_poll_for_事件一起工作的安全方法?

让select和xcb_poll_for_事件一起工作的安全方法?,c,select,polling,xcb,C,Select,Polling,Xcb,我认为这个问题并不新鲜:我有一个线程应该从一个X服务器(通过XCB)和另一个与TCP连接的服务器读取数据,因此需要调用select 让我困惑的是,当程序从select返回时,发现X服务器链接中有数据,如果数据不足以处理XCB事件怎么办?在这种情况下,xcb_poll_for_event()应该返回NULL,但当程序再次调用select时,它不会阻塞,因为毕竟有一些数据,因此程序被困在“忙”等待状态 这是一个合理的担忧吗?我相信是这样的,因为每个XCB事件都由许多字节组成,服务器在发送过程中可能会

我认为这个问题并不新鲜:我有一个线程应该从一个X服务器(通过XCB)和另一个与TCP连接的服务器读取数据,因此需要调用select

让我困惑的是,当程序从select返回时,发现X服务器链接中有数据,如果数据不足以处理XCB事件怎么办?在这种情况下,xcb_poll_for_event()应该返回NULL,但当程序再次调用select时,它不会阻塞,因为毕竟有一些数据,因此程序被困在“忙”等待状态


这是一个合理的担忧吗?我相信是这样的,因为每个XCB事件都由许多字节组成,服务器在发送过程中可能会中断。

如何使用setsockopt()将XCB fd的so_RCVLOWAT设置为所需大小的XCB事件。现在,套接字的文件描述符只有在至少有那么多数据要读取时才会选择为可读。这是我们在处理TCP服务器时使用的正常方法,但还没有在XCB fd上尝试过这种方法。

如何使用setsockopt()将XCB fd的SO\u RCVLOWAT设置为所需大小的XCB事件。现在,套接字的文件描述符只有在至少有那么多数据要读取时才会选择为可读。这是我们在处理TCP服务器时使用的正常方法,但还没有在XCB fd中尝试过这种方法。

谢谢。我以前不知道这个选项,但在这里我无法预测一个XCB事件需要多少字节。根据,这个选项似乎没有按预期工作?“select(2)和poll(2)系统调用当前不符合Linux上的SO_RCVLOWAT设置,并且在只有一个字节的数据可用时将套接字标记为可读。后续从套接字的读取将被阻止,直到SO_RCVLOWAT字节可用。”谢谢。我以前不知道这个选项,但在这里我无法预测一个XCB事件需要多少字节。根据,这个选项似乎没有按预期工作?select(2)和poll(2)系统调用当前不符合Linux上的SO_RCVLOWAT设置,并在只有一个字节的数据可用时将套接字标记为可读。从套接字的后续读取将被阻止,直到SO_RCVLOWAT字节可用为止