NIO, как определить разрыв соединения
От: unix_hater  
Дата: 04.03.08 09:55
Оценка:
Привет!

Столкнулся с проблемой при работе с NIO. В разрабатываемом сокет-сервере необходимо принимать только одно подключение, и принимать последующие только после окончания сеанса обслуживания подключившегося клиента.

В Selector можно подписаться только на ACCEPT/CONNECT/READ/WRITE. Можно ли как-то подписаться на DISCONNECT?
Re: NIO, как определить разрыв соединения
От: denis.zhdanov Россия http://denis-zhdanov.blogspot.com/
Дата: 04.03.08 10:27
Оценка: 1 (1)
Здравствуйте, unix_hater, Вы писали:

_>Привет!


_>Столкнулся с проблемой при работе с NIO. В разрабатываемом сокет-сервере необходимо принимать только одно подключение, и принимать последующие только после окончания сеанса обслуживания подключившегося клиента.


_>В Selector можно подписаться только на ACCEPT/CONNECT/READ/WRITE. Можно ли как-то подписаться на DISCONNECT?


Нельзя, тебе надо самому чекать, не задисконнектился ли клиент. Т.о. для решения твоей задачи будет достаточно чекать при новом коннекте, не отвалился ли старый.
http://denis-zhdanov.blogspot.com
Re[2]: NIO, как определить разрыв соединения
От: unix_hater  
Дата: 04.03.08 10:39
Оценка:
Здравствуйте, denis.zhdanov, Вы писали:

DZ>Нельзя, тебе надо самому чекать, не задисконнектился ли клиент. Т.о. для решения твоей задачи будет достаточно чекать при новом коннекте, не отвалился ли старый.


разумно, спасибо за совет. А можно ли как-то отловить сам момент разрыва соединения?
Re[3]: NIO, как определить разрыв соединения
От: mkizub Литва http://symade.tigris.org
Дата: 04.03.08 11:07
Оценка: 2 (2)
Здравствуйте, unix_hater, Вы писали:

_>Здравствуйте, denis.zhdanov, Вы писали:


DZ>>Нельзя, тебе надо самому чекать, не задисконнектился ли клиент. Т.о. для решения твоей задачи будет достаточно чекать при новом коннекте, не отвалился ли старый.


_>разумно, спасибо за совет. А можно ли как-то отловить сам момент разрыва соединения?


Тебе выставят OP_READ или OP_WRITE событие, но когда ты получишь ключик, он будет !isValid().

OP_READ
public static final int OP_READ
Operation-set bit for read operations.

Suppose that a selection key's interest set contains OP_READ at the start of a selection operation. If the selector detects that the corresponding channel is ready for reading, has reached end-of-stream, has been remotely shut down for further reading, or has an error pending, then it will add OP_READ to the key's ready-operation set and add the key to its selected-key set.

SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re: NIO, как определить разрыв соединения
От: Аноним  
Дата: 04.03.08 11:31
Оценка:
смотри SelectionKey.isValid()
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.