问题标签 [epoll]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1378 浏览

sockets - 多线程应用程序中的套接字读取返回零字节或 EINTR (104)

我现在是一段时间的 c 编码器 - 既不是新手也不是专家。现在,我在 PPC Linux 上使用 C 语言有一个特定的守护程序应用程序。我使用 PHP 的 socket_connect 作为客户端在本地连接到该服务。服务器使用 epoll 通过 Unix 套接字多路复用连接。使用 strstr() 解析用户提交的字符串以查找某些字符/单词,如果找到,则同时生成 4 个可连接线程到不同的网站。我使用套接字、连接、写入和读取,通过 TCP 在每个线程的端口 80 上与所述网络服务器进行交互。所有连接和写入似乎都是成功的。然而,对网络服务器套接字的读取失败,其中一个 (A) 所有 3 个线程似乎都挂起,只有一个线程返回 -1 并且 errno 设置为 104。响应线程需要大约 10 分钟 - 一个永恒的时间:-(。*我在某处读到 104(是 EINTR?),在网络上下文中表明...'连接已被对等方重置';或 (B) 来自 3 个线程的 0 个字节,并且 4 个线程中只有 1 个实际上返回了一些数据。套接字不是读/写线程安全的吗?我使用线程安全(和可重入)的 libc 函数,例如 strtok_r、gethostbyname_r 等。

*我怀疑上述虚拟主机实际上是在重置连接,因为当我运行单线程独立(其他一切都相同)时,所有事情都完美无缺,但当然是串联而不是并行。

还有第二个问题(哎呀),我无法回信给连接到我的 epoll-ed Unix 套接字的客户端。我的守护程序应用程序将永远挂起并占用 CPU > 100%。然而,没有任何东西写给客户端。确定客户端(一个非常典型的 PHP 套接字应用程序)在发生这种情况时没有关闭连接 - 也没有检测到错误。有任何想法吗?

即使使用 Valgrind、GDB 或大量日志记录,我也无法弄清楚有什么问题。请在力所能及的地方提供帮助。

0 投票
2 回答
9682 浏览

apache - 'epoll' 是 Tornadoweb(或 Nginx)如此之快的根本原因吗?

TornadowebNginx是目前流行的 Web 服务器,许多基准测试表明它们在某些情况下比 Apache 具有更好的性能。所以我的问题是:

'epoll' 是让它们如此之快的最根本原因吗?如果我想编写一个好的套接字服务器,我能从中学到什么?

0 投票
3 回答
4938 浏览

linux - EPOLLET 模式下的 Epoll 在从套接字读取之前返回 2 EPOLLIN

epoll 手册页说,如果没有进行读取,使用 EPOLLET(边缘触发)注册的 fd 不应通知两次 EPOLLIN。
因此,在 EPOLLIN 之后,您需要在 epoll_wait 能够在新数据上返回新的 EPOLLIN 之前清空缓冲区。

但是,我在使用这种方法时遇到了问题,因为我看到未触及的 fd 的重复 EPOLLIN 事件。
这是 strace 输出,0x200 是 EPOLLRDHUP,尚未在我的 glibc 头文件中定义,但在内核中定义。

因此,在添加 fd 编号 9 之后,我在接收文件描述符之前确实收到了 2 个连续的 EPOLLIN 事件,系统调用跟踪显示了我如何在读取之前删除 fd,但它应该只发生一次,每个事件一个。
所以要么我没有正确阅读手册页,要么现在这里有什么工作。

0 投票
2 回答
200 浏览

linux - 确定我可以在文件句柄中写入多少;将数据从一个 FH 复制到另一个

如何确定我是否可以将给定的字节数写入文件句柄(实际上是套接字)?(或者,如何“未读”我从其他文件句柄中读取的数据?)

我想要类似的东西:

两个文件句柄(r_handle 和 w_handle)都从 epoll_wait 接收到就绪状态。

我希望将 r_handle 中的所有数据复制到 w_handle 而不使用“写债务”缓冲区。

一般来说,如何简单可靠地将数据从一个文件句柄复制到另一个文件句柄?

@related如何在 Linux 中“互连”两个套接字?

0 投票
1 回答
1181 浏览

linux - 使用 epoll 的客户端连接

我正在使用 epoll y pthreads 在 C++ 中为 linux 编写应用程序(客户端/服务器),但如果循环正在运行(边缘触发),我不知道如何处理connect()在描述符列表中附加新连接的调用epoll_wait(),我该怎么做?...我可以使用虚拟文件描述符来触发事件和等待场景?或者一个简单的调用connect()可以触发事件?...

对不起,我的英语不好...

0 投票
2 回答
11448 浏览

linux - 非阻塞 tcp 与 epoll 连接

我的 linux 应用程序正在执行非阻塞 TCP 连接系统调用,然后用于epoll_wait检测三向握手完成。有时epoll_wait返回同时为同一个套接字描述符设置的POLLOUT&事件。POLLERR

我想了解 TCP 级别发生了什么。我无法按需复制它。我的猜测是,在我的事件循环内部的两次调用之间,epoll_wait我们有一个 SYN+ACK/ACK/FIN 序列,但我再次无法重现它。

0 投票
1 回答
5592 浏览

c - epoll_wait:最大事件数

我对maxevents参数有点困惑。假设我想编写一个可以处理多达 10k 个连接的服务器。那么我会将 maxevents定义为 10000,还是由于某种原因它应该更低?

0 投票
1 回答
8324 浏览

c++ - 在不使用 Epoll 的 Linux 上提升 Asio

我的印象是 boost::asio 默认会使用 epoll 设置而不是 select 实现,但是在运行了一些测试之后,我的设置看起来像是在使用 select。

操作系统:RHEL 4
内核:2.6
GCC:3.4.6

我写了一个小测试程序来验证正在使用哪个反应器头,看起来它使用的是选择反应器而不是 epoll 反应器。

我可能做错了什么?

0 投票
1 回答
448 浏览

c - epoll:区分“侦听器”FD

如何区分“侦听器”文件描述符和“客户端”文件描述符?

这是我在手册页示例中看到的内容:

'但是如果我没有访问权限怎么办listener

对不起,如果这是一个模糊的问题。我不太确定如何措辞。

0 投票
1 回答
471 浏览

linux - 我在哪里可以获得有关 Linux 2.6.x 上 aio 的最新信息

最近在学习如何写一个高性能的web服务器。RedHat有个实验说epoll比aio快。有人说是因为 Linux 内核中的 aio 是用 pthread 实现的。我很难找到最新的信息来证明这一点。另外我不知道现在Linux上的epoll是否仍然比aio好?所以我想知道我在哪里可以获得有关Linux 2.6.x上的aio的最新信息。多谢!