Reutilização de sessão TLS Java após conexão fechada

Eu tenho um cliente Java TLS que pode enviar uma série de solicitações para um servidor, cada uma seguida de uma resposta ao servidor.

No entanto, existem muitos servidores diferentes. Alguns são servidores de "várias mensagens" que mantêm uma conexão aberta após a primeira solicitação, para que solicitações subsequentes possam ser enviadas pela primeira conexão. Outros são servidores de "mensagem única" que fecham a conexão após cada mensagem e, portanto, é necessária uma nova conexão para as mensagens subseqüentes. Não existe uma maneira a priori para o cliente saber com que tipo de servidor está falando, nem para consertar os servidores.

É muito desejável que as mensagens únicas sejam capazes de retomar uma sessão sem o aperto de mão completo.

Meu código de cliente original apenas tentou enviar solicitações subsequentes na mesma conexão. Se isso falhou, apenas abriu uma nova conexão com o servidor. Assim, ele poderia lidar com servidores de uma e várias mensagens.

No entanto, a falha ao enviar a segunda mensagem para servidores de mensagem única parece interromper a retomada da sessão.

Meu trabalho sujo é perceber se uma mensagem falha e, em seguida, supor que ela esteja falando com um servidor de mensagem única; nesse caso, o cliente fecha explicitamente o soquete após o recebimento de cada resposta. Isso permite que as conexões subseqüentes continuem as sessões.

Mas tem que haver uma maneira melhor. Testar isInputShutdown ou isConnected não ajuda, sem surpresa, pois há problemas de tempo. A falha na conexão do servidor de mensagem única ocorre na verdade durante a leitura da resposta, após a gravação da solicitação, provavelmente devido ao buffer.

Alguma idéia muito apreciada?

questionAnswers(1)

yourAnswerToTheQuestion