问题标签 [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.

0 投票
1 回答
192 浏览

c++ - 服务器和套接字都报告 ECONNRESET。这是怎么回事?

我有一个 C++ 服务器和客户端。

我正在使用 poll() 系统调用来监视服务器上的套接字是否准备好读取、准备好写入和错误。

对于某些连接,我看到 poll() 在发送一堆数据后检测到 ECONNRESET 并在中途失败。在客户端,我也看到报告了 ECONNRESET。

所以基本上双方都报告远程端关闭了连接。

这怎么可能发生?我该如何调试?我可以启用任何 tcp 层日志记录吗?

0 投票
1 回答
75 浏览

c - 如何强制 poll() 出错

当 poll() 返回错误时,我正在尝试在我的代码中测试一个场景。但我不知道如何强制 poll() 返回错误。我试图让 poll() 无限期地阻塞并尝试向它发送一个 SIGINT 但这只会停止该过程。

有没有办法让 poll() 返回错误?

谢谢。

0 投票
1 回答
716 浏览

c - 即使 GPIO FD 发生变化,轮询也不会返回

我试图在它改变状态时使用它来读取 GPIO 值。

我已经设置/sys/class/gpio/gpio499/edge两者

我正在尝试在一个单独的线程中使用poll命令监视值的变化。这是代码片段:

我面临的问题是,如果我将事件设置为POLLIN,则 poll 会立即返回。这是可以理解的,因为在值(0 或 1)GPIO中总是有要读取的数据。我提到 了https://www.kernel.org/doc/Documentation/gpio/sysfs.txt并将事件设置为 POLLPRI | 轮询。但在此方法中,轮询仅在超时后返回。当 GPIO 的值改变时它不会返回。有什么我在这里错过的诀窍吗?我也设置/sys/class/gpio/gpio499/edge了上升,下降,但似乎没有任何效果。

编辑:这是输出grep -r . /sys/class/gpio/gpio499

注意:我想检测从 1 到 0 的值。

0 投票
0 回答
152 浏览

linux - 带有 netlink 套接字的 POLLERR

我正在使用 netlink 套接字进行用户空间到内核空间的通信。在其中一种情况下,recvmsg 调用失败,错误号为 105,即 ENOBUFS,然后在 fd 上设置了 POLLERR。

在此之后,用户空间和内核之间就不能再有任何数据流了,那么有没有办法在内核中知道 fd 出现了问题。我的意思是是否生成了任何事件,或者我可以订阅内核中的任何内容以了解当前状态。

0 投票
1 回答
75 浏览

c - 在 poll() 运行的同时从等待 pollfd 集中删除 fd

我正在监视套接字 fds 的列表并等待 POLLIN 事件。

首先,我将 fds 添加到数组并在该数组上运行 poll()。此外,在某些情况下,我想从这个数组中删除 fd(不关闭)。有时它可能与 poll() 正在运行同时发生。

据我了解,当 poll() 启动时,内核缓存了带有等待 pollfds 的数组,所以它不能知道我立即删除 fd,对吗?

我发现我们可以使用 eventfd() 实现唤醒机制,并使用它来唤醒我们的线程并从数组中删除 fd,然后继续使用新数组运行 poll()。

首先我想问一下,如果我们在 poll() 运行的同时从 pollfds 数组中删除 fd,poll() 是否正确?更要澄清的是,也许有一些不同的机制可以从等待的 pollfds 数组中删除 fd(不包括唤醒机制), poll() 会立即中断吗?

0 投票
1 回答
418 浏览

c - 检查 revents 到 struct pollfd

根据 man(2) 民意调查:

如果我写if(! (fds.revents &1 ))后使用poll是什么意思?