问题标签 [nonblocking]

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

linux - 当另一端写入和关闭时,在 epoll 控制的非阻塞套接字上丢失字节

我有一个当前订阅的非阻塞套接字:

它接收几个 EPOLLIN,我非阻塞地读取它们直到 EAGAIN,然后我收到 HUP 和 RDHUP,有时还要读取几个字节。

另一面只是:

我已经在 epollin 和关闭时间的事件循环中直接尝试使用 msg_peek 进行 recv,并添加接收到的数据它并不总是收到 960,有时只有大约 480 个字节。

使套接字非阻塞或在发送和关闭之间的客户端中放置一个 sleep(1) 可以正常工作。

在我看来,与 epoll 相关的非阻塞套接字问题更多。像“nc -l -p port”这样简单的东西接收适当数量的字节。

0 投票
5 回答
8466 浏览

c - 如何检查stdin是否仍然打开而不阻塞?

我需要用纯 C 编写的程序在标准输入关闭时停止执行。

在程序主循环中完成了无限期的工作,我无法在那里使用阻塞检查(如getc())(没有数据应该到达标准输入 - 它只是在未知时间内保持打开状态)。

我打算使用描述的功能来实现托管在 inetd、xinetd 或其类似物的网络守护进程——它应该在连接保持打开状态时在标准输出上发出数据,并在连接关闭时正确完成工作。现在我的程序被托管服务杀死,因为它在连接终止后不会停止。

我想知道fctntl()O_NONBLOCK标志应用于标准输入描述符是否允许我read()在非阻塞模式下使用函数?我应该select()以某种方式使用吗?

PS 数据不是假设的,但可能会到达标准输入。一种非阻塞读出的方式将是该问题的答案。

0 投票
1 回答
835 浏览

c++ - WinCE 上的非阻塞键盘访问虚拟键盘

我正在拼命寻找一种解决方案,使我能够以非阻塞方式读取键盘事件。这些键盘事件是由VIRTUAL KEYBOARDWinCE 设备自带的。我有一个在 C++ 中运行的控制台应用程序,要求用户通过菜单中的“ESC”、“U”和其他字符进行导航。我首先尝试使用 fread 和 stdin 并意识到它正在阻塞调用并等待回车。然后我尝试连接到 Windows 消息 WM_KEYUP,但我从未收到此 Windows 消息。此外,我尝试将 QtGUI 与事件 QKeyEvent 一起使用,但我从未收到任何事件。我想知道通常是否可以在 WinCE 设备上接收非阻塞键盘事件。如果您有任何建议,我将很高兴!

干杯,简

0 投票
4 回答
20184 浏览

c# - 没有 while(true) 循环的 C# 非阻塞套接字

我只是想进行一些套接字编程,在 c# 中使用非阻塞套接字。我发现的各种样本,例如this,似乎使用了 while(true) 循环,但这种方法会导致 cpu 以 100% 的速度爆裂。有没有办法使用事件编程风格使用非阻塞套接字?谢谢

0 投票
5 回答
16157 浏览

java - 如何在java中使一个接受的套接字非阻塞

我正在接受来自客户端的连接,然后将该连接的套接字传递给另一个对象,但是,该套接字需要是非阻塞的。我正在尝试使用getChannel().configureBlocking(false),但这似乎不起作用。它需要是非阻塞的,因为下面的方法每 100 毫秒调用一次。还有其他方法可以让我做到这一点吗?谢谢你的帮助!

0 投票
2 回答
817 浏览

python - Python套接字没有收到任何东西

我正在尝试从带有 python 的相机接收可变长度流,但会出现奇怪的行为。这是 Linux(Ubuntu 9.10)上的 Python 2.6.4(r264:75706)

该消息应该带有一个静态标头,后跟大小和流的其余部分。这是代码

使用此代码,我要么陷入“recv\'d 0 Bites”循环(这种情况很少发生),要么是这样:

这很奇怪(接收 0 个字节但退出循环)。转储的数据是错误的,在这种情况下是预期的

编辑 1:设备应该发送一个 JPEG 图像,前面有一个 10 字节的标头。当(如果)我通过第一个循环时,我需要检查此标头的正确性和大小信息。程序以错误的数据错误终止,转储文件是一堆二进制垃圾,所以我不知道我最后收到了什么。我很确定另一端的设备正在尝试发送正确的数据。

0 投票
2 回答
1610 浏览

java - 我应该为 UDP 使用(非阻塞)NIO 吗?

根据这篇文章,UDP 不会阻塞。使用(非阻塞)NIO API for UDP 有什么优势吗?还是我应该只使用更简单的“传统”io API?

0 投票
1 回答
2193 浏览

java - SSL 和 NIO 非阻塞套接字

您如何推荐制作一个高度可扩展的 SSL 客户端?

目前,我正在使用 plain Sockets 连接到需要非 HTTP SSL 套接字的 Apple APNS 服务器。我曾考虑使用 NIO 库,但它缺少SSLSocketChannel.

0 投票
5 回答
23055 浏览

language-agnostic - 原子指令

原子指令是什么意思?

以下如何成为原子的?

测试和设置

从软件的角度来看,如果不想使用非阻塞同步原语,如何保证指令的原子性?是否只能在硬件或某些汇编级指令优化中使用?

0 投票
1 回答
1405 浏览

ruby - 使用 Ruby 的“准备好了吗?” 带有gets、puts等的IO方法

标准 Ruby 库“io/wait”为 IO 对象提供了一个方法,ready?如果有可用输入则返回非 nil,否则返回 nil 或 false。我知道一些方法,例如sysreadandsyswrite与更高级别的方法一起使用并不安全,例如getsand read,并且想知道ready?与更高级别的方法混合使用是否安全。ready 方法看起来相当有用,也许比依赖 更优雅IO.select,但是,令人惊讶的是,我还没有看到它用得太多。文档中没有任何内容表明与reador一起使用是不安全的gets,我只是想确保我没有混合不兼容的方法,这些方法最终可能在读/写套接字时导致意外行为。

编辑:我想我应该提到我使用的是 Ruby 1.8.7。