У меня есть поток для каждого соединения на стороне сервера. Когда клиент не отправляет команды, поток сервера блокирует:
while ((commandHeader = fromNode.readLine()) != null) {
, который внутренне вызывает readLine () для OutputStream, полученного из сокета TCP.
Когда я вызываю socket.close () из другого потока, эти вызовы активируются с SocketException, и поток может быть прерван.
Однако, если клиент просыпается и решает выдать команду, он выполняет
stream.writeBytes("something\n");
который блокирует на неопределенный срок. Я понимаю, что это, вероятно, хорошо для TCP (это только наполовину близко).
Я должен, вероятно, отправить что-то клиенту после выхода, например "QUIT \ n"; это может также просто прочитать EOF. Но если я вызываю readLine () или другие операции чтения на клиенте перед отправкой команды, они блокируют ожидание данных, когда соединение не закрыто.
Как клиент может обнаружить, что соединение было наполовину закрыто, прежде чем пытаться записать в него?