TCP套接字上的断管读取

时间:2014-05-23 17:12:26

标签: java sockets exception tcp nio

我在Java中有一个应用程序打开一个TCP服务器套接字,然后从这个套接字读取和写入。我遇到了服务器收到IOException的问题,其中包含消息" Broken pipe"在阅读。我很清楚为什么会在写入时发生这种情况,但我无法弄清楚为什么它会在读取时发生。作为参考,这是堆栈跟踪的顶部

Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:198)
at sun.nio.ch.IOUtil.read(IOUtil.java:166)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:243)

我假设必须发生的是操作系统发出EPIPE错误,但我无法找到可能发生的代码。我已经查看了JDK源代码(Java和C源代码)中的文本' Broken pipe'我无法找到实际产生此异常的代码片段。

最终,我试图回答的问题是为什么会发生这种情况,但我也会接受一个简单解释甚至会产生此错误的答案。

1 个答案:

答案 0 :(得分:0)

它在读取时发生的原因与写入时发生的原因相同。您写入了已被对等方关闭的连接。你在读取时得到了它,因为异常因缓冲而延迟。