Autor Wątek: SelectionKey.attachment() zwraca null  (Przeczytany 1203 razy)

Offline Pirs01

  • Użytkownik

# Lipiec 06, 2008, 02:28:07
Pisze sobie "nonblocking mode sockets" i mam problem z SelectionKey.attach(Object ob) / SelectionKey.attachment().

Sprwdzam wszystkie"gotowe" klucze:
try{iNumOfKeys = selector.selectNow();}
catch(Exception e)
{
//Handle exceptions
}
if(iNumOfKeys > 0)
{
setReadyKeys = selector.selectedKeys();
iterReadyKeys = setReadyKeys.iterator();
while(iterReadyKeys.hasNext())
{
selectedKey = (SelectionKey)iterReadyKeys.next();
iterReadyKeys.remove();
if(selectedKey.isValid())
{
if(selectedKey.isAcceptable())
registerChannel(selectedKey.channel());
Jak dotad wszystko dobrze wiec rejestruje nowe polaczenie:
private void registerChannel(SelectableChannel channel)
{
try
{
ServerSocketChannel ssc = (ServerSocketChannel) channel;
SocketChannel socket = (SocketChannel) ssc.accept();
socket.configureBlocking(false);
SelectionKey selectionKey = socket.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
        ClientInfo cinfo = new ClientInfo();
selectionKey.attach(cinfo);
cinfo.setConnectionStatus(true);
}
catch(IOException e)
{
//Handle Exception!!
}
}
Ten kod tez wykonuje sie bez klopotow.
Problem w tym ze kiedy pozniej wywolam:
selectedKey.attachment()to zwraca mi null!

Ta linijka kodu jest wywolana w tej samej petli "iterReadyKeys.hasNext()" wiec selectedKey wciaz wskazuje na ten sam klucz do ktorego probowalem "zalaczyc" obiekt.

Debbugujac program widze ze obiekt cinfo (ktory przekazuje funkcji attach) rzeczywiscie jest instancja klasy ClientInfo.

Funkcje attach i attachment nie generuja zadnych bledow (nie dziwne skoro odpowiedzialne sa tylko za przypisanie i odczytanie adresu obiektu) wiec nie wiem ktora z nich zawodzi.
A moze cos innego robie zle?

Serdecznie prosze o pomoc i z gory dziekuje.
« Ostatnia zmiana: Lipiec 07, 2008, 15:21:49 wysłana przez Pirs01 »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Pirs01

  • Użytkownik