J'essaie de faire appel à un processus très difficile. Sa durée de travail moyenne est estimée à 9-10 minutes.
Lorsque j'exécute le processus, j'ai défini le délai d'expiration pour un nombre ridiculement énorme: 99999999.
Après 2 minutes, j'obtiens l'erreur suivante:
Java.net.SocketTimeoutException: lecture expirée
J'ai essayé de jouer avec un peu plus, et j'ai mis le délai d'attente à 3000, et après 3 secondes comme prévu, j'ai eu la même erreur.
Avez-vous une idée de la raison pour laquelle socket.setSoTimeout(99999999)
la définit à 120000 max?
J'ai eu le même problème et la solution n'était pas d'utiliser socket.shutdownInput(); socket.shutDownOutput();
jusqu'au dernier moment de lecture ou d'écriture de données sur le socket. Cela a obligé le socket à passer à l'état FIN_WAIT et a donc attendu 2 minutes avant de fermer. Vous pouvez en savoir plus à ce sujet dans cet article
Il est clair que vous ne définissez pas le délai d'expiration que vous pensez avoir ou que quelqu'un d'autre le modifie ultérieurement. Vous devrez poster du code pour obtenir des éclaircissements supplémentaires.
Notez que, selon W.R. Stevens dans TCP/IP Illustrated, Vol II, n ° 17.4, le délai d'attente est limité à un nombre de ticks de 1 000 Hz, de sorte qu'un délai dépassant 11 minutes est impossible. Ceci s’applique au code BSD.
Je ne sais pas comment votre application fonctionne, mais essayez de définir un délai infini timeout à la prise
public void setSoTimeout(int timeout) throws SocketException
Activer/désactiver
SO_TIMEOUT
avec le délai d'attente spécifié, en millisecondes. Lorsque cette option est définie sur un délai d'expiration autre que zéro, un appelread()
sur laInputStream
associée à ce socket bloquera uniquement pendant cette période. Si le délai expire, unJava.net.SocketTimeoutException
est généré, même si le socket est toujours valide. L'option doit être activée avant d'entrer dans l'opération de blocage pour avoir effet. Le délai d'attente doit être> 0
. Une temporisation de zéro est interprétée comme une temporisation infinie.
Si vous fournissez plus d'informations sur votre appel, je pourrai améliorer la réponse.