Bonjour
Je me tourne une nouvelle fois vers vous car je peine à gérer le comportement d'une erreur prévu.
Je fais un petit listener réseaux en UDP et je veux gérer le timeout du temps d'écoute du port, mais quand je le fais plutôt que de fermer le port et continuer il se met en panicnormal.
Sans mon timeout et avec une machine accessible pas de soucis cela fonctionne
Si jamais la machine en face n'est pas allumée ou ne répond pas le port reste en écoute et là ça me bloque. D'où le besoin d'un timeout pour gérer ce cas.
Je voulais utiliser un Result pour gérer l'erreur mais je n'arrive pas à le mettre en place, pareil pour Option. Quelqu'un pourrait-il m'aider s'il vous plait ?
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 fn reception() -> Result<(), io::Error>{ let iphost = Ipv4Addr::new(192, 168, 11, 131); let connection = SocketAddrV4::new(iphost, 9992); // Bind the socket let socket = UdpSocket::bind(connection).expect("can't bind"); //creation du buffer de reception let mut buf = [0;1024] ; //timeout si la machine ne repond pas socket.set_read_timeout(Some(Duration::from_secs(2)))?; //reception des donnees UDP dans le buffer // ca plante en cas de timeout et je n'arrive pas à mettre en place un Result ou Option à la place du expect qui me vire // let (amt,_src) =socket.recv_from(&mut buf).expect("receive...nothing"); //Ci-dessous sur les 3 lignes l'un de mes essais //if let Some(amt,_src)=socket.recv_from(&mut buf).expect("receive...nothing"){ // println!("recu: {:?}", &buf[0..amt]); // }else{return} //lecture des donnees sur le port println!("recu: {:?}", &buf[0..amt]); Ok(()) }
Partager