gpt4 book ai didi

epoll - 使用边缘触发的 epoll,我应该循环发送吗?

转载 作者:行者123 更新时间:2023-12-04 15:26:31 27 4
gpt4 key购买 nike

我正在使用 epoll 编写媒体服务器。 fds 都设置为非阻塞,我正在使用边缘触发事件。我知道对于 EPOLLIN,我需要循环读取 fd,直到返回 EAGAIN。但是写作呢?

当我想写入时,我将数据排队并在 fd 上设置 EPOLLOUT|EPOLLIN|EPOLLET。当 EPOLLOUT 事件发生时,我一次性写入整个排队缓冲区:

n = send ( fd, buf, buf_len, MSG_NOSIGNAL );

如果 n > 0 && n < buf_len 我只是重置 EPOLLOUT 并返回。我没有看到循环发送的意义(我认为 epoll 的手册页暗示了这一点)。似乎 send 已经表明它已经尽其所能,如果立即调用,它将返回 EAGAIN。

在这里消除系统调用是最有效的途径吗?

最佳答案

epoll 手册页说:

对于面向流的文件(例如管道、FIFO、流套接字),还可以通过检查从目标文件描述符读取/写入的数据量来检测读/写I/O空间耗尽的情况。 例如,如果您通过要求读取一定数量的数据来调用 read(2) 并且 read(2) 返回较少的字节数,则可以确定已用尽文件描述符的读取 I/O 空间。使用 write(2) 写入时也是如此。 (如果您不能保证受监视的文件描述符总是指向面向流的文件,请避免使用后一种技术。)

关于epoll - 使用边缘触发的 epoll,我应该循环发送吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584779/

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