Result ou Option ? Quelle solution ?
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 panic :calim2: normal.
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 :aie:. 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 ? :oops:
Code:
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(())
} |
Merci d'avance pour votre aide