gpt4 book ai didi

java - 关闭非阻塞套接字 channel

转载 作者:行者123 更新时间:2023-12-01 15:34:30 25 4
gpt4 key购买 nike

我想在写入字符串byebye后关闭Java非阻塞套接字 channel 。然而,非阻塞模式下的方法会立即返回,因此调用 close() 可能会导致正在进行的写入操作抛出 ClosedChannelException

我可以想到两种解决方法:

  1. 弹出一个线程并等待几毫秒然后关闭。
  2. 关闭前切换到阻塞模式,但是Java doc says

    "A channel must be placed into non-blocking mode before being registered with a selector, and may not be returned to blocking mode until it has been deregistered"

反正我觉得这两种方式都很肮脏。有没有优雅的方法来处理这个问题?

代码:

String msg = "byebye";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();

最佳答案

calling close() may cause the undergoing writing operation to throw a ClosedChannelException.

不,不会。该异常是由 write() 方法抛出的。一旦 write() 方法退出,就不能抛出它。数据保留在内核的套接字输出缓冲区中以供写入。

关于java - 关闭非阻塞套接字 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9109248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com