1) Qual a diferença entre conexão e tempo limite de leitura para soquetes?
O tempo limite da conexão é o tempo limite para fazer a conexão inicial; isto é, concluir o handshake da conexão TCP. O tempo limite de leitura é o tempo limite de espera para ler os dados 1 . Especificamente, se o servidor falhar ao enviar um byte <timeout> segundos após o último byte, um erro de tempo limite de leitura será gerado.
2) O que o tempo limite da conexão definido como "infinito" significa? Em que situação ele pode permanecer em um loop infinitivo? e o que pode provocar que o loop infinito morra?
Isso significa que a tentativa de conexão pode potencialmente bloquear para sempre. Não há loop infinito, mas a tentativa de conexão pode ser desbloqueada por outro thread que fecha o soquete. (Uma Thread.interrupt()chamada também pode fazer o truque ... não tenho certeza.)
3) O que o tempo limite de leitura definido como "infinito" significa? Em que situação ele pode permanecer em um loop infinito? O que pode provocar que o loop infinito termine?
Isso significa que uma chamada para reado fluxo do soquete pode ser bloqueada para sempre. Mais uma vez, não há loop infinito, mas readpode ser desbloqueado por uma Thread.interrupt()chamada, fechando o soquete e (é claro) a outra extremidade enviando dados ou fechando a conexão.
1 - Não é ... como um comentarista pensou ... o tempo limite de quanto tempo um soquete pode ser aberto ou ocioso.
HttpURLConnection.getResponseCode()estava pendurado por aproximadamente. uma semana até reiniciarmos o processo. Obviamente, não havia tempo limite definido no lado da JVM e também não houve tempo limite no lado do SO Linux.