Установка интереса к 0 для данного ключа выбора игнорируется - PullRequest
0 голосов
/ 05 мая 2019

Я использую 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.

...