草庐IT

阻塞IO

全部标签

linux - 阻塞套接字和非阻塞套接字有什么区别? (对于 realz 版)

在大家将此标记为重复之前,让我声明我知道我在网络编程方面的公平份额,这个问题是我试图解决一些即使在找到“解决方案”之后仍让我感到困惑的问题。设置过去几周我一直在编写一些胶水代码,以将大型工业系统整合到我们当前的设置中。该系统由WindowsXP计算机(PCA)控制,该计算机由Ubuntu14.04系统(PCB)通过发送稳定的2000HzUDP数据包流来控制。它使用包含系统当前状态的UDP数据包进行响应。注意确保保持2000Hz的频率,因为有3毫秒的超时,之后系统出现故障并返回安全状态。这涉及测量和解释std::this_thread::sleep_for中的错误。测量表明与目标速率的偏

c++ - 如何确定阻塞的 SSL BIO 连接是否已关闭?

我有一个要向其发送数据的阻塞SSLBIO对象。问题是远程端的连接已关闭,在我进行读取之前我无法找到它(BIO_write不会返回错误)。但是,我不想在发送前阅读,因为我不想阻止。最后,负责发送数据的代码和负责读取的代码是分开的,这意味着失败的读取不能触发另一次发送。我该如何解决这个问题? 最佳答案 有两种“关闭”状态,称为“半关闭”状态。它们主要与套接字的一侧或另一侧是否要发送更多应用程序数据有关。当您的recv调用返回0时,它实际上是在通知您没有更多的数据要接收。但是,发送数据仍然可以,除非send调用发出某种其他类型的错误信号,

windows - 使用模拟用户在 File.Encrypt 上获取 System.IO.IOException

我正在尝试以编程方式加密文件夹(使用WindowsEFS)。以下powershell代码在通过ISEpowershell控制台运行时工作正常。$obj=New-Object-TypeNameSystem.IO.FileInfo'D:\Temp'$obj.Encrypt()然而,通过带有测试厨房的ChefRecipe在模拟用户下运行此命令会产生以下错误powershell的配方包装器:ruby_block'Enableencryptiononfolder'doblockdocommand=产生以下堆栈跟踪:PSMessageDetails:Exception:System.Managem

python - 在 Windows 上使用 Glib 观察套接字将它们置于非阻塞模式

以下代码在Windows上无法正常工作(但在Linux上可以):sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.setblocking(True)sock.connect(address)gobject.io_add_watch(sock.fileno(),gobject.IO_OUT|gobject.IO_ERR|gobject.IO_HUP,callback)glib源代码中不同地方的注释片段,以及其他地方提到在Windows中,套接字在轮询期间处于非阻塞模式。结果,不断调用回调self.outgoing_cb,写

c - 从 stdin 非阻塞读取

我希望ReadConsoleW()在读取特定数量的字节后返回。但它不会返回。如何让ReadConsoleW()在读取完指定的字节数后立即返回?我试过的代码在这里:#include#includeintmain(){//somethingisbeingwrittentostdin.Sleep(2000);intb;intr;//read3widecharacterReadConsoleW(GetStdHandle(STD_INPUT_HANDLE),&b,3*sizeof(TCHAR),(LPDWORD)&r,NULL);//problem:noreturnsuntilenterpres

ruby - IO.popen 不工作蹩脚的标准输入和标准输出编码

我一直在使用管道和IO.popen,特别是在Ruby中,遇到了一个我无法弄清楚的问题。我正在尝试将二进制数据从flac进程写入到lame进程到一个文件中。我使用的代码结构如下。#filepathsfile=Pathname.new('example.flac').realpathdest=Pathname.new('example.mp3')#executetheprocessandreturntheIOobjectwav=IO.popen("flac--decode--stdout\"#{file}\"",'rb')lame=IO.popen("lame-V0--vbr-new--"

windows - 在 Windows 上的 STDIN 上使用 IO::Select

当我在Linux系统上运行下面的代码时,正如预期的那样,它大约每两秒输出一次Nothingisready,并且还会将输入的任何内容输出到控制台。但在Windows上,can_read立即返回零项。useIO::Select;my$sel=IO::Select->new();$sel->add(\*STDIN);while(1){my@ready=$sel->can_read(2);if(scalar@ready==0){print"Nothingisready\n";}foreachmy$fh(@ready){if($fheq\*STDIN){my$in=;print"got$infr

windows - XPerf中如何定位空闲时间(以及网络IO时间等)?

假设我有一个人为设计的程序:#includevoiduseless_function(){Sleep(5000);}voiduseful_function(){//...dosomeworkuseless_function();//...dosomemorework}intmain(){useful_function();return0;}目标:我希望探查器告诉我useful_function()正在不必要地调用useless_function(),它没有明显的等待原因。在XPerf下,这不会出现在我的任何图表中,因为对WaitForMultipleObjects()的调用似乎被计入了

C++ 锁定文件 Windows 阻塞模式

如何使用C++以阻塞方式在Windows上阻塞文件?我所说的阻塞是指......请求锁定,如果文件被锁定,它将等待直到它被解锁,一旦文件被另一个系统进程解锁,然后执行恢复。P.S.:如果有某种跨平台解决方案,我会更喜欢它。 最佳答案 默认情况下,LockFileEx阻塞直到可以获取锁(尽管您可以使用LOCKFILE_FAIL_IMMEDIATELY告诉它不要这样做)。显然这不是跨平台的。更新这个可怕的代码示例说明了它的工作原理(您可能需要将CreateFile中的文件名从“lockBlock.cpp”更改为)。运行该程序的一个实例,

windows - Microsoft Visual Studio 10.0\VC\include\io.h 提供了什么?

我安装了VisualStudio2010,它为我提供了C++编译器C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\vcvarsall.bat但是当我尝试构建一个应用程序(一个Python包)时,我得到了一个关于丢失的错误C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\include\io.h经调查,include文件夹几乎是空的(只有三个文件)。我需要安装哪些Windows/VisualStudio来填充包含文件夹?我正在尝试做的事情:pipinstalllxml发生了什么Build