gpt4 book ai didi

c++ - 如果我不设置 EPOLLOUT 事件并直接调用 write() 函数会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:01 26 4
gpt4 key购买 nike

我有只读数据的 EPOLLIN 事件。不设置EPOLLOUT事件直接写数据可以吗?

最佳答案

当使用带级别触发通知的 epoll 时,除了套接字的输出缓冲区实际上是满的。这样做的影响是,即使您没有要发送的内容,也没有要接收的数据,您的事件循环也会被唤醒。

要解决这个问题,您有两个实际选择:

  1. 禁用EPOLLOUT,直到您真正获得EWOULDBLOCK/EAGAIN。此时,您启用 EPOLLOUT,并在发送完成后再次禁用它。

  2. 启用边缘触发通知,并始终启用 EPOLLOUT。现在,您只会在系统从输出缓冲区满状态变为非满状态时收到 EPOLLOUT 通知。但是,EPOLLIN 现在也是边沿触发的,这意味着您只会收到一个 EPOLLIN 通知,直到您耗尽输入缓冲区。

在评论中,向您提供了第三个选项来实现您自己的轮询循环来处理具有完整输出缓冲区的套接字。这可以工作,但不是必需的,因为 epoll 可以告诉你什么时候可以写。

关于c++ - 如果我不设置 EPOLLOUT 事件并直接调用 write() 函数会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51757113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com