关闭特定的ChannelSocket实际上也会关闭TCP套接字。即使keep-alive
设置为true。
val socketChannel = selectionKey.channel().asInstanceOf[SocketChannel]
socketChannel.socket().setKeepAlive(true)
socketChannel.close()
println("Socket closed?", socketChannel.socket().isClosed) // prints true
我只想关闭套接字通道,以便不想在此通道上收听更多事件。但是我想保持连接打开。
我能够使用每个interestOps
上可用的SelectionKey
方法解决此问题。
如果您不想再听其他事件,可以使用interestOps(0)
val socketChannel = selectionKey.channel().asInstanceOf[SocketChannel]
socketChannel.socket().setKeepAlive(true)
// socketChannel.close()
selectionKey.interestOps(0) // Stops listening on events
println("Socket closed?", socketChannel.socket().isClosed) // prints false