问题标签 [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.

0 投票
1 回答
479 浏览

linux - 如何在 Linux 和 Unix 上等待 EPIPE?

我正在用 C 语言在 Linux 上编写一个程序,我想等待(使用selectpoll)管道文件描述符被破坏,例如我想等到随后的 write(2 ) 将返回 EPIPE(或将发送 SIGPIPE)。将文件描述符添加到writefdsselect的exceptfds参数并不能解决问题。我知道我可以通过创建多个进程或线程来解决这个问题,但是在这个问题中,我只对单进程、单线程的解决方案感兴趣,最好涉及selectpoll(因为我也想等待其他文件描述符事件)。我不能对谁在管道的另一端做出任何假设——如果这些进程在进程树中很远,那么解决方案必须有效。

我更喜欢在许多 Unix 系统(不仅仅是 Linux)上可移植的解决方案。

0 投票
1 回答
2786 浏览

node.js - child_process.spawn 上的 node.js EPIPE 异常

我正在使用,node.js v0.6.10虽然我在0.6.7. 基本上,我运行一个子进程,使用spawn它启动另一个 node.js 进程,并通过以下方式进行通信stdoutstdin 这是两个脚本:

父 ( cli.js)

child.js

然后当我运行时node cli.js

0 投票
3 回答
7582 浏览

io - 过滤掉断管错误

error从一个调用中得到一个返回io.Copy,我已经将一个套接字 ( TCPConn) 作为目标传递给它。预计远程主机会在他们受够了之后简单地断开连接,而我没有收到他们的任何信息。

发生下降时,我收到此错误:

但我只有一个error界面。如何区分断管错误和其他类型的错误?

0 投票
0 回答
700 浏览

c - send、recvfrom、threads、“Broken Pipe”和 SO_RCVTIMEO 错误

我有一个用 C++ 编码的服务器,在 ubuntu 10.04 上运行,目前正在生产中,它表现出一个奇怪的错误。

语境 :

每个连接到服务器的客户端都有一个套接字和两个线程

  • 1个用于写入套接字的线程,
  • 1个用于从套接字读取的线程。

套接字配置::setsockoptSO_RCVTIMEO10 秒。

套接字上的每个都设置::send了标志MSG_NOSIGNAL(每个::recvfrom也设置了,但似乎应该没有影响)

漏洞 :

我有一些证据(但不是 100% 肯定)以下情况可能很少发生:

  • ::recvfrom被调用并阻塞,直到数据存在或达到超时
  • ::send被调用并且套接字上的写入触发错误,返回EPIPE(Broken Pipe)错误
  • 错误:::recvfrom仍然被阻止,并且永远不会返回,不知何故忽略了SO_RCVTIMEO选项

上述情况对您有意义吗?

指标:

该错误大约每周发生一次。在一周内,大约有:

  • 使用了 20K 个套接字
  • 30M::recvfrom被叫
  • 60M::send调用

我应该使用超时功能::select吗?(假设超时实现将与那个不同SO_RCVTIMEO

非常感谢您对此事的任何想法!

0 投票
0 回答
454 浏览

c++ - 是否可以将 EPIPE 从 write() 获取到 NFS 磁盘上的文件描述符?

我的 C++ 应用程序EPIPE在调用write(). 传递给write()的文件描述符用于 NFS 安装磁盘上的文件。

手册页write()描述EPIPE为:

所以我很困惑我会如何得到EPIPE。可能这是一个多线程问题,并且错误地为不同的线程提供了 errno?我认为 errno 是线程安全的,所以这似乎不太可能,但是获得 EPIPE 似乎没有任何意义。这是在 Centos v4 上。

0 投票
3 回答
2575 浏览

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:似乎连接事件是在没有对方接受的情况下给出的。

0 投票
3 回答
2518 浏览

ruby - 从 ruby​​ 运行一个子进程而不等待它返回

可能重复:
在 Ruby 中生成一个后台进程

花了几天时间戳这个。直到最近,我一直在使用操作系统中的 ruby​​ 1.8.7。我会用反引号调用一个子shell。subshel​​l 是一个 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 向我展示了,如果我对红宝石术语有更好的处理,我可能会专注于此。对不起,如果这有点行人。我感谢大家的快速回答!

0 投票
0 回答
2070 浏览

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”(或者,过了一会儿,“错误:此套接字已关闭。 ") 来自服务器端和来自客户端的“套接字挂断”。

0 投票
2 回答
35794 浏览

android - Android:写入失败:EPIPE(断管)写入文件时出错

我试图以编程方式截取 Android 屏幕的屏幕截图。我已经完成了以下代码:

java.io.IOException: write failed: EPIPE (Broken pipe)

请问有人可以帮忙吗?我已经检查了其他帖子,但没有找到任何解决我问题的方法。


编辑:

请注意,错误发生在行中os.write()

0 投票
2 回答
18668 浏览

node.js - NodeJS - 如何在不缓冲的情况下流式传输请求正文

在下面的代码中,我无法弄清楚为什么 req.pipe(res) 不起作用,但也没有抛出错误。预感告诉我这是由于 nodejs 的异步行为,但这是一个非常简单的情况,没有回调。

我错过了什么?

这是卷曲:

这是调试输出(请参阅已上传的正文):

并且服务响应而不回显请求正文:

...最终的 curl 调试是

此外,当我对大型请求正文进行压力测试时,我收到 EPIPE 错误。我怎样才能避免这种情况?

-- 编辑:通过反复试验,我确实让它工作了,它仍然指向一个时间问题。虽然仍然很奇怪,因为超时会导致返回有效负载,但不介意超时持续时间。换句话说,无论我将超时设置为 5 秒还是 500 秒,有效负载都会正确地通过管道返回到请求并终止连接。

这是编辑:

?