NIO/IPv6离线场景下网络连接挂起问题求助
IPv6离线场景下NIO SocketChannel异步连接卡住问题求助
我最近碰到了一个NIO连接的异常问题,先说明下我的测试用例在以下场景中都能正常运行:
- IPv4在线、使用NIO(启动参数
-Djava.net.preferIPv4Stack=true) - IPv4离线(断开WiFi)、使用NIO(启动参数
-Djava.net.preferIPv4Stack=true) - IPv6在线、使用NIO
但唯独在IPv6离线(未连接WiFi)的场景下,连接始终无法建立,直至超时。具体流程是:首次调用SocketChannel.connect()返回false后,我通过SelectableChannel.register()发起异步连接,结果程序直接卡在了JDK代码中。
我计划下一步生成堆栈转储来获取更多细节,想问问有没有人遇到过类似的问题?我当前使用的JDK版本是9.0.4(同时也打算升级到JDK10,希望能解决问题)。
更新1
性能分析器没能帮上忙,因为NIO是异步模式:一个线程停在selector上等待本该触发的事件,另一个线程则在future上等待连接完成,但这个事件仅在离线场景下从未触发。接下来我打算先升级JDK后再做测试。
更新2
已经升级到JDK12了,但问题仍然存在。想请教下有没有人做过这样的测试:本地服务器绑定端口0,客户端通过NIO+IPv6连接到这个绑定端口?测试套件只有在线时可用、离线就跑不起来的情况真的很棘手,我正在尝试解决这个问题。
感谢大家的帮助!
内容的提问来源于stack exchange,提问作者Dean Hiller
相关产品推荐
相关产品推荐

