Здравствуйте, unix_hater, Вы писали:
_>Привет!
_>Столкнулся с проблемой при работе с NIO. В разрабатываемом сокет-сервере необходимо принимать только одно подключение, и принимать последующие только после окончания сеанса обслуживания подключившегося клиента.
_>В Selector можно подписаться только на ACCEPT/CONNECT/READ/WRITE. Можно ли как-то подписаться на DISCONNECT?
Нельзя, тебе надо самому
чекать, не задисконнектился ли клиент. Т.о. для решения твоей задачи будет достаточно чекать при новом коннекте, не отвалился ли старый.
Здравствуйте, denis.zhdanov, Вы писали:
DZ>Нельзя, тебе надо самому чекать, не задисконнектился ли клиент. Т.о. для решения твоей задачи будет достаточно чекать при новом коннекте, не отвалился ли старый.
разумно, спасибо за совет. А можно ли как-то отловить сам момент разрыва соединения?
Здравствуйте, 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.