0

管道由nio. 我发现写端点关闭但读端点打开。我检查了我的代码,两个端点总是一起关闭。那么,是否有可能在没有调用close功能的情况下由我自己关闭管道?

附言。代码是源代码zero ice。我在生产环境中发现了问题。代码路径是IceInternal.Selector,管道是_fdIntrRead_fdIntrWrite。我的ice版本是3.3.1.

我得到了答案。NIO当前线程中断时将关闭通道。这是一个ice在版本中修复的错误3.6

4

2 回答 2

0

那么,是否有可能在不调用关闭函数的情况下关闭管道?

NIO 不会关闭任何东西,除非你有一个ClosedByInterruptException. 只有应用程序可以做到这一点。

于 2016-08-08T01:27:20.633 回答
0

很可能您确实在某个地方关闭了它。我经常确信在这种情况下我没有关闭资源,但在诊断出问题后,我发现我有。

我建议现在将您关闭管道的位置(包括堆栈跟踪)记录为日志消息。例如

new Throwable(pipe + " closed here").printStackTrace();
pipe.close();
于 2016-08-01T09:04:28.583 回答