问题标签 [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 投票
3 回答
93 浏览

c - 如何获取我连接的接口

我正在尝试实现一个在分接接口上接收数据包(可能是 ICMP)的应用程序。我有这样的代码。

两个问题:

  1. 现在,一旦我在选择时收到一些东西,我如何找出数据包到达哪个分接接口?

  2. 另外我该如何测试这段代码。我有这些接口UP,我如何注入数据包以便这个接收功能可以工作?有人可以发出命令吗?ping 应该可以工作(它发送 ICMP 数据包)。什么是正确的命令。我试过“ping -I tap0 localhost”

0 投票
1 回答
1298 浏览

c - 在原始套接字上 Ping 数据包

我正在尝试在 veth 接口上接收 ping 数据包。但我在接收端看不到任何东西。当我进行 TCP 转储时,我可以看到数据包。这是我的代码。

所以我在 ve12p 上做了一个 ping 操作。它永远不会越过 select 并到达 print 语句。

我检查了 veth 接口,它们已启动,我可以在 ve12 的 tcpdump 上看到数据包。

0 投票
1 回答
1449 浏览

c - 在 C 中调用 select() 后知道哪些文件描述符已准备就绪

我是套接字编程的新手,我已经被介绍给select()系统调用。我的问题是,假设我正在用 C 语言编写服务器(我正在尝试这样做),并且我想select()在我的实现中使用该调用进行练习。我正在尝试编写一个从客户端接收信息的服务器,所以我的方法是使用select(),然后read()输出信息。

根据我读过的文档,select()返回输入集中准备好 i/o 的文件描述符的数量。我的问题是,如何知道原始集中的哪些文件描述符是为 i/o 做好准备的?我似乎无法在我过去一段时间的搜索或示例中找到它。

假设我的代码如下所示:

0 投票
2 回答
3095 浏览

c - C - 填充 TCP 套接字发送缓冲区

我正在尝试编写一个实验性的客户端/服务器程序来证明当发送缓冲区已满时写入是否失败或阻塞。基本上,我在发送方程序上有一个无限循环,我使用 select() 检查是否可以在缓冲区上写入(我认为这意味着套接字缓冲区未满),如果我可以在缓冲区上写入而不是我 write() 一个字符。当 FD_ISSET(sockfd, &writefds) 为假时循环中断(我无法在缓冲区上写入,因为它已满)。接收程序在开始 read() 之前会休眠一分钟。我希望发送者在这段睡眠时间内填充缓冲区,但实际上,程序永远不会结束。

发件人:

接收者:

0 投票
2 回答
60 浏览

c - 无缘无故跳出选择

我正在做这样的事情

我的代码无缘无故脱离了选择。它没有收到任何数据包。在 10 次运行中,我在等待选择的地方运行 1 次。休息它只是退出。

已设置套接字以接收 ICMP 数据包。在 1 次运行中,它运行良好。为什么这是废话9次?

0 投票
2 回答
105 浏览

c - 仅当套接字上的数据可用时 pthread_create

如果数据包丢失,我有服务器正在向客户端发送 udp 数据报并从客户端接收 NACK 数据报。我想创建将处理每个 NACK 数据包的线程,但我只想在我从客户端接收到某些东西时才创建线程。为此,我想使用 select ,如果套接字上有东西,则创建新线程并调用 recvfrom 函数。我定义了 timeval 结构并用 0 填充它,因为我不想等待,我希望在服务器发送时一直选择“listening on socket”,但选择总是返回 0 ....是否有任何解决方案不同的想法如何并行发送和接收?

0 投票
1 回答
139 浏览

c - C - 如何循环套接字

我有一个程序可以打印我发送的文件的内容:

但我希望这个程序监听我想打印的其他东西。所以我需要循环socket,监听socket。我知道我需要该select()功能,但我不知道如何将它用于我的代码。

0 投票
1 回答
126 浏览

c - select() 只返回一次正值

当某些数据包按预期到达 UDP 端口时,select 函数将返回 +ve 值。但这只会发生一次。从第二次在 UDP 端口接收到数据包时,该函数没有响应。但是在收到 UDP 数据包后的第一次,如果我在同一个套接字上执行 sendto(),则选择函数正在响应。这种行为的原因是什么?

编码:

0 投票
1 回答
230 浏览

c - select() 在忽略时间值的非阻塞 AF_PACKET 套接字上立即返回 0

我下面的 Linux 代码应该搜索所有接口,直到它使用 ETHERNET 类型 2 帧从特定 MAC 地址获得响应。

它不完整。

我希望 select() 阻止超时值。问题是没有数据包进来,它返回零,没有延迟。我这里有什么问题吗?

0 投票
2 回答
40 浏览

javascript - 如何在本机反应中更改选择字段中的值

我正在创建一个下拉列表(使用选择字段),我想在下拉列表中获取以下 6 个环境,目前默认值为 MMP_SSL,因此 httpLink SERVER_URL 设置为 MMP_SSL。

那么我想改成SD,httpLink SERVER_URL 应该是SD。在 EnvironmentChange 函数中,我正在更改此值,这 6 个值来自一个数组。