如何检测委派任务中的异常 (SSLEngine)



我将SSLEngine s与NIO一起使用,为我的应用程序提供非阻塞SSL连接。在握手期间的某个时刻(可能是在收到ServerHelloDone之后(,SSLEngine要求我处理委派的任务。

所以我打电话给getDelegatedTask,称之为run方法。任务本身调用X509ExtendedKeyManager.getCertificateChain,这反过来抛出一个NullPointerException。该异常由Handshaker捕获并存储以供以后报告。

但是,报告通过调用专用checkTaskThrown方法起作用,该方法仅在收到消息或要发送消息时调用。但是没有正确完成getCertificateChain,就没有什么可以发送的,另一方也没有发送任何东西,所以没有什么可以接收的。因此,异常保持隐藏状态。

由于没有一方继续前进,我们有一个活锁。我发现没有办法预防或检测它,除了

  • 使用反射调用checkTaskThrown
  • 使用一些任务/计时器超时

这两者都不是我想走的路线...

任务完成后,应重试返回NEED_TASK.

的操作

您需要查找并修复KeyManager.中的 NPE

最新更新