Я использую java.nio.channels для обработки нескольких открытых сокетов.Вызов selectionKey.interestOps (0), похоже, игнорируется.Когда я вызываю selectionKey.readyOps () сразу после этой операции, он всегда возвращает 4 (запись).
Это сделано для уменьшения количества ключей, которые должен обрабатывать селектор.Я попытался найти другое решение, но, похоже, это единственный способ, которым для операций с интрессами устанавливается значение «нет».Настройка ключа «читабельный» работает, так что можно изменить введенные операции, но не удалить все операции.
public class SelectorClass{
...
//during accept -> this happens
client = new Client(key)
...
}
public class Client{
private final SelectionKey selectionKey;
public Client(SelectionKey key){
this.selectionKey = key;
setToNone();
}
public void setToNone(){
if(selectionKey.isValid()) {
selectionKey.interestOps(0);
System.out.println(selectionKey.readyOps()); //Should be 0
}
}
}
Я ожидаю, что ключ, назначенный клиенту, вернет 0 при вызове readyOpsпосле установки интереса на 0.