Я хочу закрыть неблокирующий канал сокета Java после записи строки byebye
. Однако методы в неблокирующем режиме возвращаются немедленно, поэтому вызов close()
может привести к тому, что выполняемая операция записи выдает ClosedChannelException
.
Я могу придумать 2 обходных пути:
- Вывести поток и подождать несколько миллисекунд перед закрытием.
- Переключиться в режим блокировки перед закрытием, но Документ Java говорит:
«Канал должен быть переведен в неблокирующий режим до регистрации с помощью селектора и не может быть возвращен в режим блокировки до тех пор, пока он не будет отменен»
Во всяком случае, я чувствую, что оба пути грязные. Есть ли элегантный способ решения этой проблемы?
Код:
String msg = "byebye";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();