2012-12-13 5 views
8

Das ist eine ziemlich direkte Frage, aber ich habe eine Notwendigkeit gefunden, einen Selektor mit Blick auf meinen Socket-Kanal für Java zu registrieren.Gibt es eine Möglichkeit, einen Selektor auf einem Socket-Kanal abzumelden

SocketChannel client = myServer.accept(); //forks off another client socket 
client.configureBlocking(false);//this channel takes in multiple request 
client.register(mySelector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);//changed from r to rw 

Wo ich wie

später im Programmaufruf etwas kann
client.deregister(mySelector); 

Und dass die Wähler nicht mehr Datenschlüssel für diesen Socket-Kanal fangen. Dies würde mir das Leben bei meinem Server/Client-Design erleichtern.

Antwort

17

Anruf cancel() der Auswahltaste:

SelectionKey key = client.register(mySelector, 
    SelectionKey.OP_READ | SelectionKey.OP_WRITE); 
... 
key.cancel(); 

oder

... 
SelectionKey key = client.keyFor(mySelector); 
key.cancel(); 
+0

Oder Sie könnten tun 'client.close()' als auch. –

Verwandte Themen