- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
人 epoll:
The suggested way to use epoll as an edge-triggered (EPOLLET) interface is as follows:
i with nonblocking file descriptors; and
ii by waiting for an event only after read(2) or write(2) return EAGAIN.
假设我们有两个 fds:第一个是被动的,数据仅有时可用,第二个是主动的,数据仅有时不可用。
epoll_wait 返回我们可以读取两者。我们在循环中读取{第一个,而不是第二个}(没有调用 epoll_wait 因为它可能会在数据仍然可用时突然阻塞)。
现在第一个文件描述符在读取时返回 EAGAIN。
怎么办?
如何继续处理第二个 FD,但又不忘记第一个 FD?
更新:又发现一件事:man epoll_wait:
while specifying timeout equal to zero makes epoll_wait() to return immediately even if no events are available
有了它,即使没有事件,我也可以为 FD 枚举事件。
最佳答案
如果 FD2 始终可读,您可能会认为 epoll 不适合它。只是坐下来阅读它可能是值得的。
否则,在循环中读取 FD2 直到它耗尽,但在循环中让它每隔 X 次尝试读取 FD1 一次。如果 FD1 有数据,则读取它。如果不是,您将得到 EAGAIN,重置 X 计数器并返回读取 FD2。当两者都耗尽时,您将回到 epoll_wait。
类似于:
count = 1;
while (true)
{
read fd2;
if (EAGAIN)
break;
else
process data;
count--;
if (! count)
{
while (true)
{
read fd1;
if (EAGAIN)
count = 10;
break;
else
process data;
}
}
}
关于linux - 如何使用 epoll_select 和 EPOLLET 读取多个文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003804/
请考虑以下程序: #define _GNU_SOURCE #include #include #include #include #include #include #include i
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 1 年前。 Improve
我在边缘触发模式下使用epoll。为了避免饥饿,代码从一个套接字一次读取 MAX_FREAD_LENGTH 字节。随后组装片段直至 EOL 发生。我注意到当 MAX_FREAD_LENGTH 很小时,
进程 B 在管道上进行 epolls (EPOLLIN|EPOLLET)。 进程 A 在管道中写入 1KiB。 进程 B 醒来。 进程 B 从管道中读取 1KiB。 进程 A 在管道中写入 1KiB。
带有 EPOLLOUT 的 epoll TCP | EPOLLET只获取一次事件,即使我在获取第一个事件后发送数据也会超时。 而在UDP中,epoll在发送新数据后不断获取EPOLLOUT事件。 你能
写入器程序使用固定缓冲区的多次写入发送几 MB(几乎没有延迟)。处理程序在 EPOLLOUT | 中注册。 EPOLLET 标志。 MTU=16KB,写入缓冲区 = 4KB 或更多。 write(..
我在边缘触发模式下使用 linux epoll。 每次有新连接传入时,我都会使用 EPOLLIN|EPOLLOUT|EPOLLET 标志将文件描述符添加到 epoll。我的第一个问题是:在 epoll
人 epoll: The suggested way to use epoll as an edge-triggered (EPOLLET) interface is as follows:
epoll 联机帮助页说如果没有完成读取,用 EPOLLET(edge triggered) 注册的 fd 不应该通知两次 EPOLLIN。 因此,在 EPOLLIN 之后,您需要在 epoll_wa
是否可以在一次性级触发模式下使用epoll? 当我搜索时,我找不到任何关于它的信息;好像大家都用边沿触发的方式。 最佳答案 When the EPOLLONESHOT flag is selected
我是一名优秀的程序员,十分优秀!