Как прервать LocalServerSocket.accept - PullRequest
1 голос
/ 15 декабря 2011

Как прервать / прервать ожидание LocalServerSocket в фоновом потоке соединения в методе LocalServerSocker.accept ()?

Я пытался вызвать метод close () из другого потока, но, похоже, он не работает.

Ответы [ 2 ]

1 голос
/ 21 июня 2012

В проекте Android для него открыт билет: http://code.google.com/p/android/issues/detail?id=29939.

Кажется, проблема подтверждена Google, так как первый комментарий:

я думаю, что мы должны переписать это, чтобы использовать тот же базовый libcore вещи, и получить поведение прерывания бесплатно.

Обходной путь может заключаться в отправке пользовательской команды выключения в LocalServerSocket из другого потока, чтобы разблокировать принятие.

0 голосов
/ 24 января 2019

Вместо localSocket.close используйте это: (требуется API 21 +)

try {
    Os.shutdown(localSocket.fileDescriptor, OsConstants.SHUT_RDWR)
} catch (e: ErrnoException) {
    if (e.errno != OsConstants.EBADF) throw e   // suppress fd already closed
}
...