我有一个用于TLS连接的ClearTextStream,我想检查是否已经调用了“end”。实际问题是,我正在尝试将某些内容写入流中,并且出现“写入结束”错误。
现在要避免这种情况,我只想检查是否已经调用了“end”。我确实有一个“关闭”事件,但在所有情况下都没有被解雇。
我无法在documentation中找到它,而且我无法通过Google搜索找到类似内容。
我可以检查错误事件(这对我来说是“写完后”)并处理那里的情况 - 但是真的没有办法在开始时检查这个吗?
谢谢!
答案 0 :(得分:3)
如果您收到write after end
错误,则表示您正在尝试将数据写入已关闭的Writable
流(即,不能接受任何输入数据)。当可写流关闭时,会发出finish
事件(请参阅the documentation)。另一方面,close
事件由Readable
流发出,当底层资源关闭时(例如,当您正在读取的文件描述符被关闭时)。
由于ClearTextStream
是Duplex
流,它可以同时发出close
和finish
个事件,但它们并不意味着相同的事情。在您的特定情况下,您应该听取finish
事件并做出适当的反应。
另一个解决方案是检查this.ended
和this.finished
布尔值(请参阅the source code),但我不建议这样做,因为它们是私有变量,只反映实现细节,而不是公共API。