Я пытаюсь реализовать клиентское приложение для Android, которое подключается к серверу с помощью Socket
, обменивается некоторыми данными, а затем корректно завершает соединение, как описано в этой статье:
https://docs.oracle.com/javase/8/docs/technotes/guides/net/articles/connection_release.html
Однако поведение клиентского сокета при отключении не ведет себя должным образом.
Мы установили соединение между клиентом Android и сервером.
Клиент заканчивает отправку всех данных и вызовов socket.shutdownOutput()
(отправляет FIN
на сервер).
Сервер получает последние байты и вызывает его socket.shutdownOutput()
(отправляет FIN
клиенту).
Клиент читает последние байты с сервера, а последний вызов socket.getInputStream().read(...)
выдает следующее исключение:
java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
с указанием причины: android.system.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
Я ожидаю, что последний вызов socket.getInputStream().read(...)
должен вернуть -1
, что и происходит, когда я запускаю тот же код в OpenJDK 11 в Ubuntu.
Есть ли настройка Socket
, которая могла бы исправить поведение на Android?