Bonjour,
Nous déployons actuellement une application serveur chez un de nos clients dont l'infrastructure réseau est assez capricieuse. Il arrive en effet que pendant plusieurs heures, des paquets IP se perdent (parfois jusqu'à 100% de paquets perdus).
Les clients de cette application sont des modules embarqués programmés pour se connecter automatiquement au serveur. En cas d’échec ou de rupture de connexion, ils réessaient à intervalle régulier.
Les clients comme le serveur tournent sous Linux.
Le souci, c'est que dans ces phases où le réseau n'est plus fiable, le serveur se relance inopinément, ce qui génère des alarmes non voulues. D'après les fichiers de log du serveur, voici ce que j'ai pu constater :
1 - le processus en interface avec les clients s'arrête brutalement, sans entrer en phase d'arrêt propre. Le fichier de log correspondant ne montre rien d'anormal, hormis qu'il s'interrompt subitement. Il ne semble pas y avoir de segment violation.
2 - le thread qui gère les connexions reste parfois sans rien faire pendant 30 secondes. Je suis quasiment certain que ces 30 secondes sont passées dans le close() d'une socket. Je suspecte un timeout de protocole (TCP ?) car l'interruption dure exactement 30 secondes. J'imagine que lors de la fermeture, le protocole prévoit l'émission d'un message mais que les problèmes réseau font que l'on perd ce message. Par conséquent, il n'y a pas de réponse et le timeout fait le reste.
J'aimerais blinder l'application du serveur pour qu'au moins il ne se relance pas, mais mes connaissances en réseau sont assez limitées. Donc mes questions :
Pour le point 1 : pour quelles raisons le processus pourrait-il subitement s'arrêter à cause d'un réseau perturbé ?
Pour le point 2 : si c'est vraiment un problème de timeout, y a-t-il un moyen de réduire le délai de 30 secondes à un délai plus court lorsque le réseau devient perturbé ?
Je ne poste pas de code pour l'instant car l'application est assez volumineuse et elle fonctionne normalement lorsque le réseau tient la route. Ce n'est pas un bug logiciel qui est à l'origine de mon problème, je souhaite juste introduire plus de sécurité pour gérer une situation dégradée.
Merci d'avance !!
Avez vous des idées ?