草庐IT

非阻塞

全部标签

ios - CFReadStreamRead 在 iOS 7 下永远阻塞

我发现一个问题,其中CFReadStreamRead作为流式文件上传的一部分,从不返回。这似乎只发生在iOS7⟩上,而且在针对物理设备进行调试时比在模拟器中更频繁或者至少,它在那里更加明显。我们有一个文件的HTTP(或HTTPS,问题发生在本地托管或远程服务器)POST,通过直线,阻塞(非事件驱动)CFNetwork调用。调用此处理程序的C代码是必需的;没有回调的规定。很好,网络调用发生在后台线程和/或通过异步调度。有问题的网络代码归结为(为简洁起见删除错误处理):CFReadStreamRefupload=CFReadStreamCreateWithFile(kCFAllocator

c - TCP server 可以同时处理两个不同的client写请求而不会互相阻塞

我正在尝试编写一个可以处理两个不同客户端的TCP服务器。我有一个请求者和提供者客户。提供程序是多线程的,可以向服务器添加和删除新服务。每次添加或删除新服务时,它都应将其发送到服务器,服务器将打印更新。请求者客户端允许用户输入服务,然后检查服务器以查看该服务是否存在。我遇到的问题是recv()函数。我在我的程序中调用了两次,一次是从生产者客户端读取,另一次是从请求者读取。问题是服务器只收到一条消息然后卡住。它应该在每次线程运行时更新。问题似乎正在发生,因为第二个recv()调用阻止了它,因为它正在等待请求者。我试图通过使用非阻塞事件标志(MSG_DONTWAIT)使第二个recv()调用

java - 非阻塞 IO 仍然是服务器端 Java 的问题吗?

JavaNIOSocketFramework据称向开发人员隐藏了非阻塞IO的肮脏细节,使他们能够构建高度可扩展的应用程序,仅使用一个线程就可以处理超过10000个传入和传出套接字。对于典型版本的Java2SE/EE,非阻塞IO是否仍然是一个痛苦?这个框架是否仍然必要且有用?感谢您的宝贵时间。 最佳答案 当然,NIO对一些细节进行了抽象。非阻塞IO仍然让您头疼(至少,我发现它是),但至少它是可行的。(我个人更喜欢异步IO的.NET风格,但这是另一回事。)我通常使用阻塞IO:对于大多数任务,这就是我所需要的,并且我不会通过使用非阻塞IO

sockets - Winsock 阻塞套接字,多线程死锁

我使用这个复制器找到了我的一些代码中的死锁:if(isClient){Sendersender;Receiverreceiver;ConnectionPtrconnection=Connection::create(description);TEST(connection->connect());receiver.start();Sleep(100);sender.start();sender.join();}else{ConnectionPtrconnection=Connection::create(description);TEST(connection->listen());S

PHP - 非阻塞,传出 TCP 连接 - 如何?

我对在PHP中执行非阻塞IO的各种方法有些熟悉,但我似乎无法回答这个问题。让我描述一下我正在尝试做的事情:我想要一个名为“Monitor”的静态类,我可以向它抛出各种消息。然后该类应该连接到外部TCP服务器并发送这些消息-但我不想等待它发生。从初始连接到外部服务器到发送消息的一切都应该异步发生,而我的脚本已经转移到其他事情上。这可能吗?我目前正在尝试使用fsockopen()、stream_set_blocking()等... 最佳答案 你说的基本上是多线程(这不是通常使用php的方式)。你可以查看thisarticle看看怎么做。

android - 如何将网络状态从阻塞状态转换为连接状态

我试图在我的应用程序处于后台时建立tcp套接字连接,在我开始连接到服务器之前,我使用下面的代码检查了网络状态ConnectivityManagerconnectivityManager=(ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfoinfo=connectivityManager.getActiveNetworkInfo();NetworkInfo.DetailedStatestate=info.getDetailedState();发现state为BLOCKED,会

sockets - 为什么非阻塞 TCP 套接字会在::write() 调用中花费大量时间?

对于非阻塞TCP套接字,我希望write()或read()在任何情况下都会立即返回(无论是read()是否可以填充缓冲区,write()是否可以发送整个缓冲区)。在非阻塞模式下,是否存在导致write()工作时间(毫秒)的一些现实情况? 最佳答案 原因很简单:线程饥饿。虚拟机从我的代码中窃取时间:例如,usleep(30000)可能会在800毫秒后返回。 关于sockets-为什么非阻塞TCP套接字会在::write()调用中花费大量时间?,我们在StackOverflow上找到一个类似

c - 在非阻塞模式下创建多个 TCP 连接时内核日志中的 net_ratelimit 消息

我有一个C程序,它尝试轮询网络中的设备,如果设备可用,它会尝试从中读取值。但是当没有设备存在时,应用程序的运行会在内核日志中创建以下消息。此外,除了以下消息之外,日志中没有其他警告/警报消息。(即使在使用net.core.message_cost=0禁用速率限制之后)net_ratelimit:xxcallbackssupressed与此同时,另一个通过网络广播消息的应用程序在发送系统调用返回EINVAL时开始失败。一旦我停止轮询TCP客户端,UDPBroadcast应用程序运行正常。我运行它的系统是一个基于RAMFS的系统,运行3.14系列内核,RT_PREEMPT已应用补丁.我编写

sockets - 套接字未阻塞写入操作 : OpenSolaris

我有一个单元测试来检查阻塞和非阻塞套接字的行为——服务器写了一个很长的响应,在某些时候它不应该再写了,它写入block。基本上是一边写,另一边不读。在Solaris下,有时我会收到错误“空间不足”(写入75MB后),而不是在写入时阻塞:重现问题的程序:#include#include#include#include#include#include#include#include#include#include#include#include#includecharconst*address="127.0.0.1";#definecheck(x)do{if((x)0){intfd=-1;

c - 代理需要非阻塞套接字吗?

我有以下代码:{send(dstSocket,rcvBuffer,recvMsgSize,0);sndMsgSize=recv(dstSocket,sndBuffer,RCVBUFSIZE,0);send(rcvSocket,sndBuffer,sndMsgSize,0);recvMsgSize=recv(rcvSocket,rcvBuffer,RCVBUFSIZE,0);}它最终应该成为通用TCP代理的一部分。现在,它并不能完全正确地工作,因为recv()等待输入,因此数据只能以block的形式传输,具体取决于它当前所在的位置。我读到的是我需要类似“非阻塞套接字”的东西和一种监视它们