Java: exception de timeout de lecture du socket
J'ai essayer de faire un appel à un très lourd processus.
C'est de la moyenne de la longueur de travail est estimée par 9-10 minutes.
Lorsque j'exécute le processus, je définir le délai d'attente pour un trop grand nombre: 99999999.
Au bout de 2 minutes, j'obtiens l'erreur suivante:
java.net.SocketTimeoutException: Read timed out
J'ai essayé de jouer avec elle un peu plus, et je définissez le délai de 3000, et après 3 secondes, comme prévu, j'ai eu le même message d'erreur.
Avez-vous une idée sur le pourquoi du socket.setSoTimeout(99999999)
il définit à 120000 max?
source d'informationauteur Urbanleg
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et la solution était de ne pas utiliser
socket.shutdownInput(); socket.shutDownOutput();
jusqu'au dernier moment de la lecture ou l'écriture de données sur la socket. Ce qui fait que la prise d'aller à FIN_WAIT état donc attendre 2 minutes avant la fermeture. Vous pouvez en lire plus à ce sujet dans ce postClairement vous n'êtes pas définir le délai d'expiration vous pensez que vous êtes à un paramètre ou à quelqu'un d'autre est en train de changer par la suite. Vous devrez poster un peu de code pour obtenir plus de précisions.
Note que, selon W. R. Stevens dans TCP/IP Illustrated, Vol II, n ° 17.4, le délai d'attente est tenue dans un court comme un certain nombre de 1000Hz tiques, de sorte qu'un délai d'attente au-delà de 11 minutes n'est pas possible. Cela s'applique au code BSD.
Je ne suis pas sûr de savoir comment votre application fonctionne, mais essayez de définir une infinie délai d'attente pour la prise
Si vous fournir plus d'informations à propos de votre appel, j'ai peut améliorer la réponse.