草庐IT

非阻塞

全部标签

c++ - GMainLoop 和 TCP Listen 线程阻塞

我需要你的帮助。我有主循环GMainLoop和附加的超时回调:MainLoop=g_main_loop_new(NULL,FALSE);g_timeout_add_seconds(Interval,TimeoutCallback,(gpointer)Rec);g_main_loop_run(MainLoop);然后监听套接字:intControlServer::GStart(){intlistenfd;GIOChannel*in;socklen_taddr_len;listenfd=TcpListen(host,port,&addr_len);in=g_io_channel_unix_

c - recv 阻塞直到发送第二个数据包

我正在使用recv方法在WindowsCE6.1系统上通过TCP接收数据。出于某种原因,第一次调用recv有时会阻塞,直到发送下一个数据包。我现在突然同时收到两个数据包。tcpClientSocketId=accept(tcpServerSocketId,(structsockaddr*)&client,(int*)&sockaddrLength);if(tcpClientSocketId我验证了数据实际上是使用Wireshark发送的。有人知道为什么recv方法会阻塞吗?编辑:只是为了澄清:我不依赖于逐个数据包接收的数据——这些数据被组合成一个字符串,然后进行处理。除了等待recv调

java - Java中的非阻塞连接

在Java中实现非阻塞TCP连接的最佳方法是什么?我希望能够将套接字与普通流(有时是SSL)一起使用。我还必须以Android2.1为目标,所以我买不起最新最好的。 最佳答案 您可以使用SocketChannel和configureBlocking(false).如果你有多个非阻塞I/Ochannel并且你打算从一个线程中使用它们,你可能会发现Selector也很有用。请注意,使用阻塞套接字和使用多线程来确保您的应用在阻塞等待I/O完成时可以继续执行有用的工作通常更容易且更不容易出错。

c - 非阻塞 TCP 套接字处理 - 如何在写入套接字之前检测阻塞状态?

我目前正在编写一个从一个套接字读取并在另一个套接字上写入的代理应用程序。两者都设置为非阻塞,允许处理多个套接字对。为了控制套接字之间的正确流程,如果目标套接字上的写入可能会阻塞,应用程序不应从源套接字读取。这个想法很好,但是我发现如果不先写入目标套接字就无法检测到它的阻塞状态……这不是我们所需要的。我知道有一个选项可以使用SIOCOUTQ(使用ioctl())并计算剩余缓冲区,但与简单检查目标套接字是否匹配相比,这看起来很难看可以开始写作了。我想我也可以只对这个套接字使用select(),但这对如此繁重的系统调用来说太浪费了。 最佳答案

c# - C# 中的 WebRequest/WebResponse 阻塞

我正在尝试从C#本地触发信号。目标是向localhost/serv?stream=SOME_STREAM发出请求。我不关心从服务器获得响应,我只需要让服务器接收请求。现在我正在使用以下代码,但我并不真正关心使用这些对象——任何解决方案都可以:privatevoidupdateStreams(stringstreamname){WebRequestmyWebRequest=WebRequest.Create(newUri("http://localhost/serv?stream="+streamname));WebResponsemyWebResponse=myWebRequest.G

c++ - 阻塞 TCP 套接字 : “send()” return and error handling

根据这个答案Blockingsockets:when,exactly,does“send()”return?,阻塞套接字上的send()将在用户缓冲区被复制到内核缓冲区后立即返回。在传送失败的情况下(即,客户端未收到字节),调用send()的进程如何收到失败发生的通知? 最佳答案 POSIX/BSD套接字API不为TCP连接错误提供中断驱动的异步接口(interface)。由于TCP是可靠的,因此数据未交付的唯一原因是连接本身出现故障,无法完全交付。您必须通过在(可能是非阻塞的)套接字上执行某种同步操作来检测错误。最异步的机制是使用

java - 需要阻塞直到接收到特定字符序列的 TCPIP 客户端

我需要一个java7TCP/IP客户端,它将阻塞直到它接收到用户指定的字符序列(在我的例子中是消息终止符/分隔符——这会自动将数据“分block”为单独的消息以供进一步处理)。我预计这将是非常标准的代码,可以在网络上免费获得——但到目前为止运气不好。使用标准行分隔符(例如Oracle的KnockKnock客户端中的readLine())将接收到的数据“分block”,使事情复杂化是不可能的,因为这些字符是消息中的有效数据。消息格式是国际标准,无法更改。在尝试了一些事情之后(见下文),我想知道我是否采用了正确的方法。有没有我可以从中汲取灵感的免费软件示例?或者也许是满足我需要的类已经存在

java - 套接字客户端永远阻塞

我正在用Java编写套接字客户端。在程序中,我想从服务器获取信息。当服务器收到“GET_LIGHTS”命令时,它会以JSON格式发回数据。但在我的代码中,bw.write()和bw.flush()在socket.close()之前不起作用.因此,BufferedReader对象未就绪:br.ready()返回false。我的代码有什么错误吗?客户端代码如下所示。packagemonitor;importjava.io.*;importjava.net.InetSocketAddress;importjava.net.Socket;importjava.util.ArrayList;pu

c++ - BOOST-ASIO 阻塞服务器不响应阻塞客户端?

我最近有这个question解决了有问题的服务器,但事实证明服务器似乎没有回复客户端,也没有收到任何发送的数据。这就是我在客户端所做的。C:\blocking_tcp_echo_client\bin\Debug>blocking_tcp_echo_client127.0.0.14001Entermessage:helloException:read:Endoffile这是服务器端。我确实在启动客户端之前启动了服务器。我还用原来的code测试了客户端并且效果很好。C:\boost_server_class\bin\Debug>boost_server_classTCPIP_server:

python - ZeroMQ 连接阻塞

如果连接端点是一个IP,如tcp://192.168.0.2:9876,Socket.connect将立即返回。但是,如果端点包含类似tcp://server.local.:9876的DNS名称,Socket.connect似乎会阻塞,直到server.local。已解析,如果无法解析名称,最终会失败并引发zmq.error.ZMQError异常。有没有办法以非阻塞方式连接? 最佳答案 DNS主机名解析在zmq::socket_base_t::connect中以同步方式完成://Resolveaddress(ifneededbyth