Закрытие в неблокирующем режиме неблокирующее.
Вы можете перевести канал в режим блокировки, установить положительное время ожидания задержки и закрыть его, и это будет блокировать на время ожидания задержки, пока очищается буфер отправки сокета, но, увы, Java не выдает исключения, если истечение времени ожидания истекло, поэтому вы не можете знать, все ли данные исчезли. Я сообщил об этой ошибке десять или более лет назад, и она вернулась «не будет исправлена» из-за проблем совместимости. Если вы можете подождать, пока выйдет Java 7, я считаю, что в nio2 это исправлено, я, конечно, просил об этом, но кто знает, когда это будет?
И даже если у вас есть все это, все, что вы знаете, это то, что данные были отправлены. Вы ничего не знаете о том, что оно было получено или обработано приложением получателя. Если вам это нужно, вы должны встроить его в протокол приложения.