我正在使用Java非阻塞SocketChannel编写一个服务器程序。有时我想发送一个回复消息,然后关闭通道,就像下面的代码一样。
然而,close()方法中断了write()方法,我得到了一个java.nio.channels.ClosedChannelException,并且消息没有被发送。
我可以弹出一个线程,在关闭通道之前等待1-2秒,但我觉得创建另一个线程太浪费了。
在有挂起的操作时,关闭SocketChannel的正确方法是什么?
String msg = "Wrong password!";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();
发布于 2010-12-02 22:49:49
channel.socket().setSoLinger(true,MAX_SECONDS_FOR_OUTPUT_TO_DRAIN);
请参阅linger option上的信息。如前所述,它将导致close()阻塞长达MAX_SECONDS_FOR_OUTPUT_TO_DRAIN秒。
https://stackoverflow.com/questions/4340747
复制