问题标签 [poll-syscall]
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.
c++ - 为什么 poll 一直返回,尽管没有输入?
我编写了一个小测试程序来弄清楚如何与poll
. 我创建了三个文件testa
, testb
,testc
并将字符串hello\n
写入第一个文件。所以,这是我的调用poll
:
根据手册页,超时-1
应该表明系统调用永远不会超时。但是,它不断返回而没有任何内容可供阅读。我总是消耗输入的一个字节并且可以看到hello\n
正在打印的内容,但是 poll 并没有就此停止。它只是继续假装有东西可以读。
我得到的是:
(永远重复最后两行)
我正在使用g++ -Wall -Wextra -std=c++11 poll.cpp -o poll
3.10-2-amd64 内核进行构建。
c - 为什么这个基准代码使用如此高的 CPU?
下面的代码有效,它正在发送所有正确的数据,并且正在接收正确的数据。
当我用它对一个非常快的服务器进行基准测试时,基准测试的 CPU 使用率约为 10%。但是,当我对慢速服务器进行基准测试时,它会上升到 ~50%——与我正在基准测试/压力测试的服务器相同*。
top
报道的内容就是这样。
为什么会占用这么多CPU?我怀疑我在滥用民意调查,但我不确定如何?
慢速服务器的 CPU 时间是基准的 4 倍,而快速服务器的 CPU 时间是基准的 7 倍。
*(我现在在同一台机器上同时运行基准测试和服务器。通信是通过 TCP 进行的。)
linux - 如何处理 Linux 套接字 revents POLLERR、POLLHUP 和 POLLNVAL?
我想知道当 poll 设置这些位时应该做什么?关闭套接字,忽略它还是什么?
c - POLLHUP vs POLLNVAL,或者什么是 POLLHUP?
手册页对 poll(2) 说:
POLLHUP - 挂断(仅输出)
POLLNVAL - 无效请求:fd 未打开(仅输出)
究竟有什么区别?编写一个简单的程序显示POLLNVAL
如果我关闭文件描述符将触发,然后尝试从关闭的 fd 中读取。但是,我想不出一种方法来返回POLLHUP
.
c - 如何使用 poll 来接受多个客户端?(TCP 服务器) (C)
这个轮询业务似乎是一个疯子写的,我不确定如何使用它来允许多个客户端连接到服务器,然后将它们的输入发送给所有其他客户端。
所以如果我想让三个客户去,我需要这样的东西:
然后究竟要做什么才能读入和写出消息?
c - 为什么 select() 调用有超时?在常见情况下它的合理值是多少?
我想知道 POSIX select() 调用中的超时值。我理解为什么人们可能想要 0 值(用于轮询文件描述符)。通常使用哪些其他值,以及用于什么目的?
c - 轮询后的 Read() 返回 POLLIN 和 POLLERR
我有一个用于网络连接管理的 aysnc 线程池模型。一个持续调用 poll() 的调度程序线程和一个读/写一次 poll() 指示的工作线程池。
考虑 poll() 指示套接字已准备好读取的情况。但是工作线程还没有处理读取。当工作线程尚未处理读取时,我禁用了读取轮询。现在远程端断开连接并且 poll() 返回 POLLERR/POLLHUP。当工作线程在此之后调用 read() 会发生什么?
即使有一些数据尚未读取,read() 是否返回 <0?或者
即使套接字具有 POLLERR/POLLHUP,read() 是否会从网络读取数据?
c - 即使在对等方挂断后,poll() 也可以返回 POLLIN 事件吗?
我看到 poll() 系统调用即使在对等方关闭套接字之后也会返回 POLLIN 事件。我看到 POLLIN 和 POLLERR 都设置了。即使在 read() 调用返回 -1 之后,这种情况也会继续发生。
我的逻辑仅在没有 POLLIN 时才处理 POLLERR,以确保我读取了在套接字断开连接之前已经到达的任何数据包。结果,我永远不会处理 POLLERR,因为 POLLIN 总是被设置。
为什么 poll() 在套接字错误后返回 POLLIN 和 POLLERR?我应该如何处理这种情况。
谢谢!
c - 正在进行 poll() 系统调用时正在访问 Pollfd 结构
我有一个专门的轮询线程来执行 poll() 系统调用。在一个事件上,发布一个工作线程以从网络进行实际的读/写。如果工作线程正在处理某个事件,轮询线程将禁用 fd。一旦工作线程完成读/写操作,它就会重新启用 fd 进行轮询。
工作线程可以直接修改 poll() 使用的 pollfd 数组吗?如果 pollfd 数组在传递给 poll() 调用时被修改,会不会有任何问题?
c - 网络 write() 是否有可能失败但 poll() 未检测到
是否有可能对套接字的 write() 调用失败但 poll() 未检测到任何错误?是否有任何类别的错误会导致写入失败,但 poll() 系统调用不会将其视为错误?
我有一个调度程序线程,它不断监视套接字并负责检测和处理套接字错误。我有一个工作线程,当调度程序线程通知时,它会在套接字上进行实际的读取和写入。工作线程的 write() 调用失败,但调度程序线程的 poll() 系统调用从不报告错误。怎么会这样!