问题标签 [epipe]
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.
linux - 如何在 Linux 和 Unix 上等待 EPIPE?
我正在用 C 语言在 Linux 上编写一个程序,我想等待(使用select或poll)管道文件描述符被破坏,例如我想等到随后的 write(2 ) 将返回 EPIPE(或将发送 SIGPIPE)。将文件描述符添加到writefds或select的exceptfds参数并不能解决问题。我知道我可以通过创建多个进程或线程来解决这个问题,但是在这个问题中,我只对单进程、单线程的解决方案感兴趣,最好涉及select和poll(因为我也想等待其他文件描述符事件)。我不能对谁在管道的另一端做出任何假设——如果这些进程在进程树中很远,那么解决方案必须有效。
我更喜欢在许多 Unix 系统(不仅仅是 Linux)上可移植的解决方案。
node.js - child_process.spawn 上的 node.js EPIPE 异常
我正在使用,node.js v0.6.10
虽然我在0.6.7
. 基本上,我运行一个子进程,使用spawn
它启动另一个 node.js 进程,并通过以下方式进行通信stdout
,stdin
这是两个脚本:
父 ( cli.js
):
child.js
然后当我运行时node cli.js
:
io - 过滤掉断管错误
我error
从一个调用中得到一个返回io.Copy
,我已经将一个套接字 ( TCPConn
) 作为目标传递给它。预计远程主机会在他们受够了之后简单地断开连接,而我没有收到他们的任何信息。
发生下降时,我收到此错误:
但我只有一个error
界面。如何区分断管错误和其他类型的错误?
c - send、recvfrom、threads、“Broken Pipe”和 SO_RCVTIMEO 错误
我有一个用 C++ 编码的服务器,在 ubuntu 10.04 上运行,目前正在生产中,它表现出一个奇怪的错误。
语境 :
每个连接到服务器的客户端都有一个套接字和两个线程
- 1个用于写入套接字的线程,
- 1个用于从套接字读取的线程。
套接字配置::setsockopt
为SO_RCVTIMEO
10 秒。
套接字上的每个都设置::send
了标志MSG_NOSIGNAL
(每个::recvfrom
也设置了,但似乎应该没有影响)
漏洞 :
我有一些证据(但不是 100% 肯定)以下情况可能很少发生:
::recvfrom
被调用并阻塞,直到数据存在或达到超时::send
被调用并且套接字上的写入触发错误,返回EPIPE
(Broken Pipe)错误- 错误:
::recvfrom
仍然被阻止,并且永远不会返回,不知何故忽略了SO_RCVTIMEO
选项
上述情况对您有意义吗?
指标:
该错误大约每周发生一次。在一周内,大约有:
- 使用了 20K 个套接字
- 30M
::recvfrom
被叫 - 60M
::send
调用
我应该使用超时功能::select
吗?(假设超时实现将与那个不同SO_RCVTIMEO
)
非常感谢您对此事的任何想法!
c++ - 是否可以将 EPIPE 从 write() 获取到 NFS 磁盘上的文件描述符?
我的 C++ 应用程序EPIPE
在调用write()
. 传递给write()
的文件描述符用于 NFS 安装磁盘上的文件。
手册页write()
描述EPIPE
为:
所以我很困惑我会如何得到EPIPE
。可能这是一个多线程问题,并且错误地为不同的线程提供了 errno?我认为 errno 是线程安全的,所以这似乎不太可能,但是获得 EPIPE 似乎没有任何意义。这是在 Centos v4 上。
c - 连接到环回地址时的管道损坏 (EPIPE)
我目前正在测试我的网络代码。这涉及通过 IPv4 环回地址 (127.0.0.1) 建立连接。不幸的是,程序经常(并非总是)在发送数据时给出 EPIPE 错误。
我正在使用伯克利网络套接字和 libevent。我通过以下方式制作了一个非阻塞套接字:
我通过以下方式进行连接事件:
并通过以下方式添加:
连接:
连接后,会发生 canSend 事件:
但是发送经常会出现 EPIPE 错误:
它登陆return CB_SOCKET_FAILURE;
并且 errno 设置为 EPIPE。现在为什么会这样?如果设置了发送标志,则它只是 MSG_NOSIGNAL,因为 SIGPIPE 一直以这个错误中断程序。我希望 EPIPE 导致 CBSocketSend 返回 CB_SOCKET_FAILURE 并且不中断程序,但是 EPIPE 没有原因导致发送失败,那么为什么要这样做呢?
上次我收到错误时,我注意到连接的线程仍在 connect() 调用中。使连接事件由单独的线程而不是连接的线程处理是否有危险?
在这些地方查看网络代码:
https://github.com/MatthewLM/cbitcoin/blob/master/test/testCBNetworkCommunicator.c https://github.com/MatthewLM/cbitcoin/tree/master/src/structures/CBObject/CBNetworkCommunicator https://github。 com/MatthewLM/cbitcoin/tree/master/dependencies/sockets
谢谢你。
编辑:我再次运行它,在 connect() 完成后出现错误。
编辑 2:似乎连接事件是在没有对方接受的情况下给出的。
ruby - 从 ruby 运行一个子进程而不等待它返回
可能重复:
在 Ruby 中生成一个后台进程
花了几天时间戳这个。直到最近,我一直在使用操作系统中的 ruby 1.8.7。我会用反引号调用一个子shell。subshell 是一个 bash 包装器,它会在 stdout 和 stderr 都关闭的情况下调用在后台运行任何程序。然后它运行 disown 让 init 接管该过程,它会立即返回。这多年来一直很好,我会让这个循环过程在后台启动工作并立即报告“是的,它运行了,这就是我要告诉你的全部内容”。
我将所有东西都升级到 rvm 1.9.3 并且一切都很好,除了这个技巧。我开始怀疑这比我想承认的更像是一种黑客行为。在 1.9.3 中,当我生成该子 shell 时,我总是收到 EPIPE 错误。它说它的管道坏了。我可以接受它在 1.9.3 中不起作用,因为我在 1.8.7 中所做的似乎有点恶心。
我试过使用系统命令,也试过 open3:popen2。他们还和我一起抛出了一个 EPIPE,我称之为 disown wrapper。
这是 disown 包装器。在红宝石中,我有类似的东西
当它运行时,它会抛出
如果我不将(零)输出分配给 r 变量,则效果是相同的。并具有系统功能和Open3:popen2。
所以我的目标是简单地从 ruby 运行命令,而不是等待它返回。这需要几个小时,我不需要跟踪它,只需生成它。如果它开始听起来像 ruby 不能再这样做,或者如果我的 disown 包装器太令人发指而无法获得任何批准,我可能会尝试一个工作线程池。行。谢谢。
*编辑:感谢大家的精彩回答。我认为 Casper 向我展示了,如果我对红宝石术语有更好的处理,我可能会专注于此。对不起,如果这有点行人。我感谢大家的快速回答!
node.js - Node.js - 运行多个请求时写入 EPIPE 错误
我正在使用 Node 的“net”模块编写一个静态 Web 服务器,但在运行压力测试时遇到了一些麻烦。
这是测试本身的代码:
在 Node v. 0.8.15(当前最新版本)上运行时,对于 'numOfRequest' 大于 20,服务器几乎崩溃 - 在一千个请求中,只有 ~160 个被正确处理。从测试人员的角度来看,
我正在使用 fs.createReadStream().pipe() (使用适当的参数,并输入 {end: false} )通过套接字发送数据。另外,我在超时(两秒不活动)时调用socket.destroy()(其中socket是net.createServer的回调函数中接收的参数),如果我收到“Connection:close”作为标题,则调用socket.end() HTTP 请求。
有什么帮助吗?我什么都试过了;切换到 http.get(),在创建服务器时放置 {allowHalfOpen: true} 等等 - 但我仍然收到“错误:写入 EPIPE”(或者,过了一会儿,“错误:此套接字已关闭。 ") 来自服务器端和来自客户端的“套接字挂断”。
android - Android:写入失败:EPIPE(断管)写入文件时出错
我试图以编程方式截取 Android 屏幕的屏幕截图。我已经完成了以下代码:
java.io.IOException: write failed: EPIPE (Broken pipe)
请问有人可以帮忙吗?我已经检查了其他帖子,但没有找到任何解决我问题的方法。
编辑:
请注意,错误发生在行中os.write()
。
node.js - NodeJS - 如何在不缓冲的情况下流式传输请求正文
在下面的代码中,我无法弄清楚为什么 req.pipe(res) 不起作用,但也没有抛出错误。预感告诉我这是由于 nodejs 的异步行为,但这是一个非常简单的情况,没有回调。
我错过了什么?
这是卷曲:
这是调试输出(请参阅已上传的正文):
并且服务响应而不回显请求正文:
...最终的 curl 调试是
此外,当我对大型请求正文进行压力测试时,我收到 EPIPE 错误。我怎样才能避免这种情况?
-- 编辑:通过反复试验,我确实让它工作了,它仍然指向一个时间问题。虽然仍然很奇怪,因为超时会导致返回有效负载,但不介意超时持续时间。换句话说,无论我将超时设置为 5 秒还是 500 秒,有效负载都会正确地通过管道返回到请求并终止连接。
这是编辑:
?