草庐IT

阻塞队列--LinkedBlockingQueue

全部标签

阻塞模式下的 Linux TCP 套接字

当我以阻塞模式创建TCP套接字并使用send(或sendto)函数时,函数调用何时返回?是否必须等到套接字的另一端接收到数据?那样的话,如果网络堵车,会不会堵很久? 最佳答案 发送方和接收方(以及可能的中介)都会缓冲数据。数据发送成功并不能保证接收端已经收到。通常写入阻塞套接字,只要发送方缓冲区中有空间就不会阻塞。一旦发送方的缓冲区已满,写入将阻塞,直到其中有空间用于整个写入。如果写入部分成功(接收方关闭套接字、将其关闭或发生错误),则写入返回的字节数可能少于预期。随后的写入应该给出错误或返回0-这种情况在TCP套接字上是不可逆的。

boost - boost::asio tcp 套接字关闭是否阻塞?

boost::asioTCPsocketaccept/read/write均提供异步版本,但不提供关闭版本。在我的代码中,我只调用socket.close(),大多数时候它工作正常。它触发了正常的TCP关闭。但有时,close()只是关闭套接字而没有关闭TCP。结果,我不得不调用shutdown()来代替。但我不想阻止我的代码。shutdown()是否在boost:asio中阻塞?关闭()怎么样?close()是否阻塞? 最佳答案 首先,Boost.Asio中的shutdown()和close()调用调用底层的BSD套接字实现。因此

sockets - 如何在 Corona SDK Lua 中运行阻塞操作?

我是LUA的新手,我正在使用CoronaSDK在LUA中编写一个tcp消息传递库。我遇到了一个问题,即使它在协程中运行,套接字读取操作也会挂起应用程序UI。我如何启动协程:functionMessaging:readLoop()self.readCoroutine=coroutine.create(function()self:blockingLoop()end)coroutine.resume(self.readCoroutine)end阻塞循环:functionMessaging:blockingLoop()line,err,rest=self.sock:receive(BUFSI

c++ - BSD 套接字 - 如何使用非阻塞套接字?

我正在尝试使用非阻塞TCP套接字。问题是他们还在阻塞。代码如下-服务器代码-structsockaddrname;charbuf[80];voidset_nonblock(intsocket){intflags;flags=fcntl(socket,F_GETFL,0);assert(flags!=-1);fcntl(socket,F_SETFL,flags|O_NONBLOCK);}intmain(intagrc,char**argv){intsock,new_sd,adrlen;//sockisthissocket,new_sdisconnectionsocketname.sa_f

具有非阻塞或多线程功能的 Ruby Tcp Server 类

找不到任何可以帮助构建非阻塞/多线程服务器的gem或类。哪里可以找到? 最佳答案 Rubydocs在套接字上有一些很好的例子。使用该页面中的信息,我使用非阻塞套接字拼凑了一个简单的客户端和服务器。这些主要是该页面的代码副本,并进行了一些更改。简单的服务器代码(使用您可能感兴趣的accept_nonblock调用):require'socket'includeSocket::Constantssocket=Socket.new(AF_INET,SOCK_STREAM,0)sockaddr=Socket.sockaddr_in(6212

c++ - 异步,非阻塞套接字行为-WSAEWOULDBLOCK

我继承了两个应用程序,一个在Windows7PC上运行的TestHarness(客户端),另一个在Windows10PC上运行的服务器应用程序。我正在尝试使用TCP/IP套接字在两者之间进行通信。客户端将请求(以XML形式的数据)发送到服务器,然后服务器将请求的数据(也是XML)发送回客户端。设置如下所示:ClientServer----------------------------------------||SendsRequests|||ClientSocket|----------------->|ServerSocket|||此过程始终适用于初始连接(即新启动的客户端和服务器

c# - 可扩展的套接字事件队列处理

我的C#类必须能够处理通过tcp流式套接字连接接收到的大量事件。类的套接字从tcp服务器接收到的事件消息量是完全可变的。例如,有时它会在十秒内仅收到一个事件消息,而有时它会在一秒钟内收到六十条事件消息。我正在使用Socket.ReceiveAsync接收消息。如果接收操作处于挂起状态,则ReceiveAsync返回true;如果线路上已有数据并且接收操作已同步完成,则返回false。如果操作挂起,Socket将在IO完成线程上调用我的回调,否则我在当前(IOC)线程中调用我自己的回调。此外,与事件消息混合在一起,我还收到了对发送到此tcp服务器的命令的响应。立即处理响应消息;单独地,通

c# - 非阻塞 Tcp 服务器

这真的不是问题,我只是在寻找一些指导方针:)我目前正在编写一些抽象的tcp服务器,它应该使用尽可能少的线程。目前它是这样工作的。我有一个正在监听的线程和一些工作线程。监听器线程只是等待客户端连接我希望每个服务器实例都有一个监听器线程。工作线程正在客户端套接字上执行所有读/写/处理工作。所以我的问题是构建高效的工作流程。我遇到了一些我还不能真正解决的问题。worker代码是这样的(代码真的很简单,只是为了显示我遇到问题的地方):ListreadSockets=newList();ListwriteSockets=newList();ListerrorSockets=newList();w

java - Java 中的非阻塞套接字写入与阻塞套接字写入

为什么有人更喜欢阻塞写而不是非阻塞写?我的理解是,如果你想确保另一方在write方法返回后得到TCP数据包,你只会想要阻止写入,但我什至不确定这是可能的。您将不得不刷新,而刷新将不得不刷新底层操作系统写入套接字缓冲区。那么非阻塞套接字写有什么缺点吗?就性能而言,拥有一个大的底层写套接字缓冲区是不是一个坏主意?我的理解是,底层套接字写入缓冲区越小,当底层套接字缓冲区已满且isWritable()返回false时,您就越有可能遇到缓慢/错误的客户端,并且必须在应用程序级别丢弃/排队数据包。 最佳答案 Myunderstandingist