socketChannel 抛出权限被拒绝的 IOException

socketChannel throws IOException with Permission Denied

我在各种平台上工作了一段时间的代码突然开始失败,代码中发生了变化,但没有与这个地方相关的区域。

抛出异常的代码行是:

(SocketChannel) selectionKey.channel()).finishConnect()

它抛出:

java.net.SocketException: Permission denied: no further information

可能是什么问题?

一些日志行可能会显示更多信息,这是一个测试代码:

2016-12-04 22:50:10,585 [main] DEBUG Socket - Socket-Client-1-1
register to connect to address: 0.0.0.0/0.0.0.0:8080
2016-12-04 22:50:10,585 [main] DEBUG SocketSelector - Registering keys: OP_CONNECT (for Socket-Client-1-1)
2016-12-04 22:50:10,595 [main] DEBUG SocketSelector - Registered to: OP_CONNECT > 2016-12-04 22:50:10,595 [NetworkThread] DEBUG SocketSelector -Got selected keys
for channel (java.nio.channels.SocketChannel[connection-pending remote=0.0.0.0/0.0.0.0:8080])

问题是您正在尝试连接到 0.0.0.0,这不是有效的 TCP 目标地址。由于 man connect.

中所述的原因,这会导致 EPERM

使用 127.0.0.1 或正确的 IP 地址。