Bonjour,
je sais que ce genre de question a déjà été posée mais les réponses trouvées ne correspondent pas trop à mes attentes..
j'ai une application qui fait de la copie de fichier via une socket d'un serveur jusqu'à un client, et je dois faire en sorte d'éviter toute erreur possible..
Un des aspect qui me pose problème : je lance une copie de fichier, pendant la copie, je simule une erreur sur le réseau :
- câble débranché coté client
- câble débranché coté serveur
- arrêt brutal du serveur
- arrêt brutal du client
dans le cas ou j'arrête le client, le serveur remarque l'exception precisant que le relais est brisé (erreur IO)
dans le cas ou j'arrête le serveur, je ne peux pas le voir du coté client, puisque la fonction read() est bloquante.
Dans le cas où je débranche un câble alors la c'est magnifique, ma barre de progression se met en pause (puisque read() ne reçoit plus de données) et aucune exception n'est levée. Le truc c'est que même après 5 minutes, rien n'est levé, et je peux même pousser le vice, puisque si je rebranche mon câble, tout repart comme avant, la copie...
Comment faire pour remarquer la deconnexion ? parce qu'il ne s'agit pas d'un socket.close()...
la fonction socket.isConnected() renvoie true dans tous les cas, et ça ne m'arrange pas de faire un ping récurrent pendant ma copie...
Comment puis-je faire ? Y a t'il un moyen de mettre une sorte de timeout sur le read() pour lui dire qu'au bout de 2secondes où il ne reçoit plus rien, il faut couper ? ...
Merci de vos réponses !
Partager