SocketTimeout + consumo de processamento

Ola pessoal, estou desenvolvendo uma aplicação que precisa acessar um servidor via telnet, para isto estou utilizando um cliente telnet da apache, que encapsula as requisições via socket.

Depois de enviar a requisição, a reposta esta sendo pega da seguinte maneira:

            while (!done) {
                if (System.currentTimeMillis() &gt= finalTime) {
                    throw new SocketTimeoutException();
                }
                
                if (this.inputStreamReader.ready()) {
                    len = this.inputStreamReader.read(charsFromCAI);
                    
                    dataFromCAI.append(new String(charsFromCAI, 0, len));
                                            
                    if (dataFromCAI.toString().indexOf(finalDelimiter) &gt= 0) {
                        done = true;
                    }
                }
            }

onde o inputStreamReader é um InputStreamReader que foi instanciado atrazer do inputStream do socket.
O problema e que quando existe um timeout, o while fica rodando e rodando consumindo todo processamento da maquina :frowning:
Alguem saberia como me apontar uma forma de resvolver este problema?
(o consumo de maquina no timeout)
(ps: to pensando em dar um sleep na thread main quando não entrar no if, so que isto é muito POG)

Se eu tivesse de fazer algo parecido (efetuar um polling usando “ready”) usaria Thread.sleep mesmo. Não é POG (aliás, isso é sigla para o quê?)

Programação Orientada a Gambiarras

hehehehe é isto mesmo POG…
O problema é que isto é um processo batch que efetua request a este servidor na escala de milhões, e fazer um sleep poderia influenciar na performance, vcs acham que isto poderia acontecer?

Olá

O Socket é um SocketChannel?

Além do SocketChannel,use também Selector do java.nio.

[]s
Luca

Não, ele não é um socketchannel, vou fazer uns testes com ele.