Запись в канал сокета Java, который должен быть закрыт, не генерирует исключение - PullRequest
3 голосов
/ 07 мая 2010

У нас есть java-сервер, который поддерживает сокет-канал открытым с клиентом Android, чтобы обеспечить возможности push-уведомлений для нашего клиентского приложения.

Однако после перевода Android в режим «В самолете», который, как я ожидал, разорвет соединение, сервер все равно сможет записать объект SocketChannel, связанный с этим клиентом Android, и не будет выдано никакой ошибки. Вызов SocketChannel.isConnected () перед записью в него возвращает true.

Чего нам не хватает? Отличается ли работа с розетками на мобильных устройствах?

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 19 декабря 2010

SocketChannel.socket().isConnected() и SocketChannel.isConnected() возвращают значение false перед подключением сокета.Как только сокет будет подключен, они вернут true, они не вернутся в false по любой причине.

SocketChannel.isOpen() возвращает true, пока вы не вызовете SocketChannel.socket().close() или SocketChannel.close().Как только вы вызвали close () для сокета, SocketChannel.isOpen() вернет false, никакое другое событие не заставит его вернуть false.

SocketChannel.socket().isClosed() вернет false, пока вы не вызовете SocketChannel.socket().close() или SocketChannel.close().Как только вы вызвали close() для сокета - SocketChannel.socket().isClosed() вернет true, никакое другое событие не заставит его вернуть true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...