epoll相关内容

如何在Linux GPIO中使用Boost::ASIO

我有一个使用Boost::ASIO进行异步输入/输出的单线程Linux应用程序。现在,我需要扩展此应用程序以读取/sys/class/gpio/gpioXX/value上的GPIO输入。 在边沿触发的GPIO输入上使用Boost::ASIO::POSIX::STREAM_DESCRIPTOR可以做到这一点吗? 我配置的GPIO输入如下: echo XX >/sys/class/g ..
发布时间:2022-04-09 15:33:24 C/C++开发

带epoll的多线程UDP服务器?

我想在 C/Linux 中开发一个多线程 UDP 服务器.该服务在单个端口 x 上运行,因此只能将单个 UDP 套接字绑定到它.为了在高负载下工作,我有 n 个线程(静态定义),比如每个 CPU 1 个线程.可以使用 epoll_wait 将工作交付给线程,因此可以使用 'EPOLLET | 按需唤醒线程.埃波罗内肖特".我附上了一个代码示例: static int epfd;静态 sig_at ..
发布时间:2022-01-22 17:06:13 服务器开发

epoll() 是否在 O(1) 中完成工作?

维基百科说 与旧的系统调用不同,后者运行时间为 O(n),epoll 运行时间为O(1) [2]). http://en.wikipedia.org/wiki/Epoll 但是,Linux-2.6.38 上 fs/eventpoll.c 的源代码,似乎它是用一个用于搜索的 RB 树实现的,它有 O(logN) /** 在 eventpoll 树中搜索文件.RB树操作* 受“mt ..
发布时间:2022-01-19 16:40:33 服务器开发

epoll 线程安全吗?

epoll中有两个函数: epoll_ctl epoll_wait 当我使用相同的 epoll_fd 时,它们是否线程安全? 如果一个线程调用epoll_wait,其他线程同时调用epoll_ctl,会发生什么? 解决方案 它是线程安全的,但没有太多文档明确说明这一点.请参阅此处 顺便说一句,您也可以让多个线程在单个 epoll_fd 上等待,但在这种情况下会有点棘手 ..
发布时间:2022-01-19 15:56:56 其他开发

epoll如何工作的一般解释?

我正在写一篇关于从数据库轮询(通过同步存储过程调用)切换到消息队列(通过发布/订阅)的技术文章.我希望能够解释轮询数据库与建立与 AMQP 代理的连接和配置消息处理程序相比有何巨大不同和重得多. 有人可以在这里提供一个解释,或者给我一个很好的高级教程,说明当通知套接字上有新数据可用时,epoll 是如何工作的? 解决方案 我假设“epoll 的工作原理"是指从用户的角度来看它是如何工 ..
发布时间:2022-01-11 17:53:53 Python

Windows 上最好的 epoll/kqueue/select equivalient 是什么?

Windows 最好的 I/O 事件通知工具是什么? 我最好的意思是...... 对输入文件描述符的数量没有限制 适用于所有文件描述符(磁盘文件、套接字等) 提供多种通知方式(边缘触发、限制触发) 解决方案 在 Windows 中,异步操作由文件操作完成,而不是由描述符完成.有多种方法可以等待文件操作异步完成. 例如,如果您想知道网络套接字上的数据何时可用,请在套接字 ..
发布时间:2022-01-04 08:21:20 其他开发

非阻塞 tcp 与 epoll 连接

我的 linux 应用程序正在执行非阻塞 TCP 连接系统调用,然后使用 epoll_wait 检测三向握手完成.有时 epoll_wait 会同时返回 POLLOUT &POLLERR 为同一个套接字描述符设置的事件. 我想了解 TCP 级别发生了什么.我无法按需重现它.我的猜测是,在我的事件循环中对 epoll_wait 的两次调用之间,我们有一个 SYN+ACK/ACK/FIN 序列, ..
发布时间:2021-12-28 13:07:43 服务器开发

我如何使用 EPOLLHUP

你们能给我提供一个使用 EPOLLHUP 处理死对等点的好的示例代码吗?我知道这是检测用户断开连接的信号,但不确定如何在代码中使用它..提前致谢.. 解决方案 您使用 EPOLLRDHUP 来检测对等端关闭,而不是 EPOLLHUP(它表示套接字意外关闭,即通常是内部错误). 使用它非常简单,只需将标志与您提供给 epoll_ctl 的任何其他标志“或"即可.因此,例如用 EPOLL ..
发布时间:2021-12-20 10:46:28 服务器开发

为什么 epoll 比 select 快?

我看到很多比较说 select 必须遍历 fd 列表,这很慢.但是为什么 epoll 不必这样做呢? 解决方案 有很多关于这个的错误信息,但真正的原因是: 一个典型的服务器可能要处理 200 个连接.它将为需要写入或读取数据的每个连接提供服务,然后需要等到有更多工作要做.在等待期间,如果在这 200 个连接中的任何一个上接收到数据,则需要将其中断. 使用select,内核必须将 ..
发布时间:2021-12-19 15:19:00 其他开发

epoll、poll、threadpool 有什么区别?

谁能解释一下epoll、poll和线程池的区别? 优缺点是什么? 对框架有什么建议吗? 对简单/基础教程有什么建议吗? 似乎 epoll 和 poll 是 Linux 特定的...是否有 Windows 的等效替代方案? 解决方案 线程池与 poll 和 epoll 并不真正属于同一类别,因此我假设您将线程池称为“线程池处理多个连接的线程池"每个连接的线程". 优缺点 ..
发布时间:2021-12-14 20:48:29 其他开发

异步连接和断开与 epoll (Linux)

我需要使用 epoll for Linux 为 tcp 客户端异步连接和断开连接.有分机.Windows 中的函数,例如 ConnectEx、DisconnectEx、AcceptEx 等...在 tcp 服务器标准接受功能正在工作,但在 tcp 客户端不工作连接和断开...所有套接字都是非阻塞的. 我该怎么做? 谢谢! 解决方案 要做一个非阻塞的 connect(),假设套接 ..
发布时间:2021-12-11 11:59:41 服务器开发

C: epoll 和多线程

我需要创建专门的 HTTP 服务器,为此我计划使用 epoll sycall,但我想利用多个处理器/内核,我无法提出架构解决方案.ATM 我的想法是:用自己的 epoll 描述符创建多个线程,主线程接受连接并在线程 epoll 之间分配它们.但是有没有更好的解决方案?我可以阅读哪些关于高负载架构的书籍/文章/指南?我只看过 C10K 文章,但大多数示例链接都已失效:( 仍然没有-关于这个主题的深入 ..
发布时间:2021-11-17 02:19:34 其他开发

EPOLLRDHUP 不可靠

我正在使用 epoll_wait 通过客户端-服务器 TCP 连接使用非阻塞读/写. 问题是,我无法使用 EPOLLRDHUP 标志可靠地检测到“对等关闭连接"事件.经常发生标志未设置的情况.客户端使用 close() 并且服务器在大多数情况下从 epoll_wait 接收一个 EPOLLIN |EPOLLRDHUP 事件.正如预期的那样,读取产生零字节.但是,有时只有 EPOLLIN 出现 ..
发布时间:2021-09-04 19:52:43 其他开发

如何处理多部分网络数据块?

我正在使用 TCP 为给定的协议编写网络客户端,但我对事物的整体架构存在一些哲学问题.有时可能会发生我没有完整请求数据的情况,我可能需要读取比目前可用的字节多一些的字节,我想有时我可以在我想要的请求之后获得另一个请求的一部分.在这种情况下,通常的做法是什么? 解决方案 TCP 套接字是面向流的.这意味着读取它们与读取文件相同.如果要通过 TCP 传递离散消息,则需要将数据流拆分为消息,就像 ..
发布时间:2021-06-07 19:52:22 其他开发

当 epoll 发出活动信号时, recv() 调用如何阻塞?

我的应用程序类似于 libevent,使用 epoll(在级别触发模式下)检测 I/O 活动并调用回调来处理它. 我最近发现我的 TCP/IP 套接字被阻塞,这是一个意外,但我仍然不希望 recv() 调用阻塞一个由 epoll 已读取活动未决.即使套接字出现错误,recv() 肯定会返回并告诉我. 我对此有什么误解? 在这种情况下,什么样的网络条件会导致 recv() 阻塞? ..
发布时间:2021-06-07 19:44:25 服务器开发

如何为套接字或 epoll 事件分配上下文

我想使用 epoll 编写一个基于事件的服务器. 每个客户端都有一个不同的请求,服务器应该响应它们.服务器将等待连接,当连接可用时,它们会排队等待读取.从客户端读取数据,它们将排队等待写入.处理完数据后,应向每个人发送适当的响应. 所有操作都是异步的. 问题是,当套接字准备好写入时,我如何确定哪个响应是针对哪个套接字的?一种方式,我可以存储一个(套接字,数据)元组,但这是一种糟糕 ..
发布时间:2021-06-07 19:40:42 服务器开发

如何检查客户端连接是否仍然存在

我正在使用 epoll 进行网络编程.我有一个连接列表并将每个客户端都放在列表中.如果用户正常断开连接,我可以通过读取 0 来检测用户断开连接.但是,如果用户以某种方式意外断开连接,那么在尝试向用户发送数据之前,它无法知道这一点. 我不认为 epoll 提供了一个很好的方法来处理这个..所以我认为我应该自己处理这个.如果你们能提供任何与此问题相关的示例或参考资料,我将不胜感激. 解决方 ..
发布时间:2021-06-07 19:35:10 其他开发