poll()API中pollfd.events|=~POLLIN为什么是注销可读?

Owl丶 2020-06-18 09:48:13
LINUX高性能服务器编程里的代码,对于可读事件的文件描述符,用了
pollfd.events|=~POLLIN

这句话是注销可读吗?为什么可以这么写?
POLLIN不是某几位为1,其余都为0的掩码吗?
这样写之后其他位不都变成1,那掩码不就混乱了吗?

...全文
326 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysx18 2022-08-10
  • 打赏
  • 举报
回复

我也觉得这里不太对

  • 打赏
  • 举报
回复 1
太强了,我就说这里不太对!
wzp1421166369 2020-09-12
  • 打赏
  • 举报
回复 1
楼主好,的确,这里存在问题,如果采用`pollfd.events|=~POLLIN`,那么将会出现掩码不能够符合要求的情况 比如从效果上来说,会因为上面所述的以及下面这两句:
fds.events |= ~POLLOUT;
fds.events |= POLLIN;
而出现关注事件错乱引起的poll()返回了不符合要求的事件——>最终可能导致不断进入POLLOUT条件分支 我是将两个 xxx |= ~xxx改成 xxx &= ~xxx就好了 看书看到这种bug真心难受,如果对于一些经典的书能有相关的网站列出bug或者改进就好了

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧