我正在使用Java非阻塞SocketChannel编写服务器程序。有时我想发送回复消息,然后关闭频道,如下面的代码。
但是,close()方法会中断write()方法,我得到一个java.nio.channels.ClosedChannelException并且没有发送消息。
我可以弹出一个线程并等待1-2秒然后关闭频道,但我觉得制作另一个帖子太浪费了。
在有待处理的操作时关闭SocketChannel的正确方法是什么?
String msg = "Wrong password!";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();
答案 0 :(得分:-1)
channel。socket()。setSoLinger(true,MAX_SECONDS_FOR_OUTPUT_TO_DRAIN);
请参阅linger option上的信息。如上所述,它会导致close()阻塞最多MAX_SECONDS_FOR_OUTPUT_TO_DRAIN秒。