什么是Broken pipe异常的含义?

31

什么是“broken pipe”异常,它在什么情况下会发生?

3个回答

72

管道是数据流,通常是从文件或网络套接字中读取的数据。如果这个管道突然从另一端关闭,就会发生破裂的管道。对于文件来说,这可能是因为文件已挂载在磁盘上或远程网络已断开连接。对于网络套接字来说,可能是因为网络被拔掉或另一端进程崩溃了。

在Java中,没有特别针对BrokenPipeException的异常类型。这种类型的错误将被包裹在不同的异常中,例如SocketExceptionIOException


很好的解释,是的,它被包装在IOException中,但是有一个清晰的消息“Broken pipe”,在日志中我们会得到类似这样的内容:Caused by: java.io.IOException: Broken pipe。 - Asraful
@xyz_scala 如果这种情况一再发生,那么有可能是软件的一端关闭了套接字,而你在另一端收到了它,或者你遇到了硬件故障,并且两端都出现了这个问题。 - Erick Robertson
只有在向被另一端关闭的连接写入数据时才会发生“Broken pipe”。当您从被另一端关闭的连接读取数据时,会收到“end-of-file”提示。 - Karsten Spang

6

管道基本上是两个进程之间的通信渠道。因此,一个进程向管道写入数据,而另一个进程从管道读取数据。 断开的管道异常通常意味着一个进程试图从管道中读取或写入数据,而在管道另一端的进程已经死亡/被终止。


0

我觉得你正在使用 Java.net?

如果你关闭了连接,那么在发送更多数据之前,你需要打开一个新的 socket。

或者是你的连接被拒绝了。


1
如果他关闭了自己的连接,他会收到“socket closed”的错误信息。如果他的连接尝试失败,他甚至不会得到一个Socket.无论哪种情况下,他都不会收到“broken pipe”的错误信息。在问题中没有证据表明他是否使用java.net. - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接