问题标签 [select-function]

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 回答
570 浏览

c++ - 选择函数内部是否调用 tcp 连接?

代码新宠物:

我的问题是当连接因非阻塞错误而失败并调用 select 并说 select return success 然后我们需要再次调用 connect 或 select function internal do connect?

0 投票
1 回答
1103 浏览

c - 使用 select 进行套接字编程

我有两个节点与套接字通信。每个节点都有一个读线程和一个写线程来相互通信。下面给出的是读取线程的代码。使用该代码的两个节点之间的通信工作正常。但我试图在这个线程中添加一个选择函数,这给我带来了问题(选择的代码在评论中。我只是取消注释它以添加功能)。问题是一个节点不接收消息,只超时。另一个节点从另一个节点获取消息,但永远不会超时。如果没有选择(保留注释 /* */),这个问题就不存在(两个节点都发送和接收消息)。

谁能指出问题可能是什么?谢谢。

0 投票
2 回答
5142 浏览

c - 使用 sleep 和 select 信号

我想使用该select()函数等待 1 秒,因为我的程序使用信号来控制东西,所以sleep()会过早返回。奇怪的是,使用时select()它也会过早返回。

我这样称呼选择

但是每当信号到达时,它就会返回(我正在使用纳秒计时器来接收信号)

有谁知道为什么?

0 投票
1 回答
13392 浏览

c - 使用 select() 系统调用监听标准输入和服务器

我想使用 select 系统调用来多路复用 STDIN 和 SOCKFD(连接到服务器),这样我必须同时监听 STDIN 和 SOCKFD,并且根据数据可用于读取的位置,我必须继续进行。

注意:#define STDIN 0

这就是我执行以下操作时发生的情况。

  • 我以通常的方式连接到服务器 [ socket() 然后 connect() ]
  • 我将 STDIN 和连接套接字描述符“SOCKFD”添加到用于读取的 fd_set(名为“readset”)中。
  • 然后我调用 select()。
  • 使用 FD_ISSET 确定哪个 fd 已准备好进行读取。

这种设置的问题是 FD_ISSET 对于两个 fd 始终为 true。一旦我连接到服务器,我看到 FD_ISSET(sockfd, &readset) 始终为真,无论服务器是否发送数据或我是否从键盘输入数据,FD_ISSET(STDIN, &readset) 也是如此。

我可能做错了什么?

/* 连接成功 */

}

0 投票
4 回答
1295 浏览

c - select() 在长时间运行后立即超时 (C++)

大多数情况下,这段代码工作得很好。但有时当可执行文件运行了一段时间后,select() 似乎立即超时,然后进入一个奇怪的状态,它不断被调用,立即超时,一遍又一遍。然后必须从外面杀死它。

我的猜测是标准输入超时更改的方式是错误的——这就是 select 阻塞的原因。

在 StackOverflow 上环顾四周,大多数人的 select() 问题似乎都可以通过确保每次都使用宏(FD_ZERO 和 FD_SET)重置并使用正确的初始参数进行选择来解决。我不认为这些是这里的问题。

0 投票
2 回答
2128 浏览

c - select 和 recvfrom 的意外结果

如果在“超时”发生之前我没有将消息从其他程序发送到该程序,则 select 语句“失败”,因此我不能在其中使用 recvfrom 语句。我曾经这样做过,以便我的另一个程序在无限循环中与这个程序联系,它从未进入 if 语句。

什么工作:如果我在每次超时发生之前联系这个程序,一切都很好。如果我将 recvfrom 语句放在 if(___ && select) 之外,它完全可以正常工作。

这是一个小图,这个程序将被称为 Recv:

程序将很好地联系 A 和 B //回到循环开始

发布前 2 分钟,我决定最后看一下我以前的代码。我想我忘了

在 for 循环(其中 tv.tv_sec = 1)之后。

有人可以详细说明为什么有必要这样做吗?

0 投票
1 回答
486 浏览

c - 即使在 ICMP 端口无法访问的情况下,select() 超时 3 秒

当我尝试使用非阻塞套接字连接到服务器时(以便我可以使用带有超时参数的 select()),我意识到在连接到被 iptables 使用 -j REJECT 阻塞的端口时,select() 等待直到超时参数,但最多为 3s .. ICMP 端口不可达数据包真的很快也没关系。

在上面的示例中,如果连接到 localhost:1234 并且端口被阻塞,则 select() 阻塞直到 3 秒,如上所述。

有谁知道为什么这个 3 秒的超时会导致“连接被拒绝”?我该如何调整它(因为我的 ICMP 端口在 0.02 毫秒后无法访问)?

0 投票
2 回答
272 浏览

c - 崩溃网络和套接字的后续状态

我想知道当它工作的网络崩溃时,套接字的状态是如何变化的。我的问题是当我模拟这个网络的崩溃时select(),控制所有套接字的函数返回给我一些理论上不应该设置的套接字。操作系统可能在写入和读取时都设置了崩溃的套接字?

0 投票
2 回答
3432 浏览

c - Select (Linux) 函数总是返回 0

在我的情况下,选择函数总是返回零,这是超时,并且这种情况不断发生,因此我的进程的 CPU 使用率也高达 98%。我也尝试设置 NULL 而不是设置一些超时值,但它仍然返回零。我还使用 poll 函数替换了 select。民意调查也出现了同样的问题。

这是我的代码的一部分;

0 投票
3 回答
25839 浏览

c - 如何使用 select() 从 C 中的键盘读取输入

我正在尝试使用 select() 来读取键盘输入,但我陷入了我不知道如何从键盘读取并使用文件描述符来做到这一点的困境中。我被告知使用 STDIN 和 STDIN_FILENO 来解决这个问题,但我仍然感到困惑。
我该怎么做?